Wstaw CreatedBy i CreatedOn we wszystkich brakujących tabelach danych w SQL
Kiedy projektujemy Access z rozwiązaniami SQL Server, prawie zawsze dodajemy CreatedBy i CreatedOn do wszystkich naszych tabel, pozwalając naszym klientom zobaczyć, kto utworzył rekordy w interfejsie Access.
Skrypt do automatycznego dodawania CreatedBy i CreatedOn do tabel
Wiele razy dziedziczymy bazy danych SQL i potrzebujemy szybkiego sposobu na dodanie obu pól do wszystkich tabel w bazie danych. W tym celu skorzystamy z poniższego skryptu, który sprawdzi, czy w tabeli występują CreatedBy i CreatedOn, a jeśli ich nie ma, dodaj je:
DECLARE @ROWID Int
DECLARE @SQLExecute Varchar(max)
DECLARE @Table_Name VARCHAR(Max)
DECLARE @Qty Int
SET @rowid = 0
SET @Table_Name = ''
DECLARE grant_tbl_cursor CURSOR FOR
SELECT Table_Name
FROM tblTablePermissions
OPEN grant_tbl_cursor
FETCH NEXT FROM grant_tbl_cursor
INTO @Table_Name
WHILE @@FETCH_STATUS = 0
BEGIN
IF COL_LENGTH(@Table_Name, 'CreatedOn') IS NULL
BEGIN
/*Column does not exist or caller does not have permission to view the object*/
select @sqlExecute = 'alter table [' + @Table_Name + '] add CreatedOn DateTime2(0) DEFAULT CURRENT_TIMESTAMP NULL'
PRINT @SQLExecute
EXECUTE( @sqlExecute)
END
IF COL_LENGTH(@Table_Name, 'CreatedBy') IS NULL
BEGIN
select @sqlExecute = 'alter table [' + @Table_Name + '] add CreatedBy Varchar(25) DEFAULT suser_sname() NULL'
EXECUTE( @sqlExecute)
End
FETCH NEXT FROM grant_tbl_cursor
INTO @Table_Name
END
CLOSE grant_tbl_cursor
DEALLOCATE grant_tbl_cursor
Skrypt odczytuje z tblTablePermissions, która jest po prostu listą tabel SQL Server używanych przez aplikację. Używamy tabeli w naszej technice DSNless.
Po wykonaniu skryptu SQL Server automatycznie datuje i umieszcza nazwę sieciową użytkownika w polu CreatedBy, co pozwala na stworzenie analizy, ile nowych rekordów zostało dodanych do bazy danych i przez kogo w czasie.