我創建新的數據庫,並在每個表我想有這樣幾列:自動添加特定的列在創建新表
CreatedBy,
CreatedDate,
ModifiedBy,
ModifiedDate,
....
所以如果有人創建表;這些列應自動添加,無需在創建表T-SQL中編寫腳本。要麼通過Management Studio的設計創建,要麼使用腳本,它應該自動添加這些列。
有沒有辦法做到這一點?
我創建新的數據庫,並在每個表我想有這樣幾列:自動添加特定的列在創建新表
CreatedBy,
CreatedDate,
ModifiedBy,
ModifiedDate,
....
所以如果有人創建表;這些列應自動添加,無需在創建表T-SQL中編寫腳本。要麼通過Management Studio的設計創建,要麼使用腳本,它應該自動添加這些列。
有沒有辦法做到這一點?
試試這個動態查詢(自動列添加到您的表):
DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL = STUFF((
SELECT CHAR(13) + 'ALTER TABLE [' + SCHEMA_NAME(o.[schema_id]) + '].[' + o.name + ']
ADD
CreatedBy DATETIME
, CreatedDate DATETIME
, ModifiedBy DATETIME
, ModifiedDate DATETIME;'
FROM sys.objects o
WHERE o.[type] = 'U'
AND NOT EXISTS(
SELECT 1
FROM sys.columns c
WHERE o.[object_id] = c.[object_id]
AND TYPE_NAME(c.system_type_id) = 'DATETIME'
AND c.name IN ('CreatedBy', 'CreatedDate', 'ModifiedBy', 'ModifiedDate')
)
FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)'), 1, 1, '')
PRINT @SQL
EXEC sys.sp_executesql @SQL
輸出:
ALTER TABLE [dbo].[test]
ADD
CreatedBy DATETIME
, CreatedDate DATETIME
, ModifiedBy DATETIME
, ModifiedDate DATETIME;
更新與DDL觸發器:
CREATE TRIGGER TRG_TABLES
ON DATABASE
AFTER CREATE_TABLE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @TABLE_NAME SYSNAME
SELECT @TABLE_NAME = EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]', 'SYSNAME')
DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL = STUFF((
SELECT CHAR(13) + 'ALTER TABLE [' + SCHEMA_NAME(o.[schema_id]) + '].[' + o.name + ']
ADD
CreatedBy DATETIME
, CreatedDate DATETIME
, ModifiedBy DATETIME
, ModifiedDate DATETIME;'
FROM sys.objects o
WHERE o.[type] = 'U'
AND o.[object_id] = OBJECT_ID(@TABLE_NAME)
AND NOT EXISTS(
SELECT 1
FROM sys.columns c
WHERE o.[object_id] = c.[object_id]
AND TYPE_NAME(c.system_type_id) = 'DATETIME'
AND c.name IN ('CreatedBy', 'CreatedDate', 'ModifiedBy', 'ModifiedDate')
)
FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)'), 1, 1, '')
EXEC sys.sp_executesql @SQL
END
GO
保存在SSMS
新表或任何其它類似的產品。它只是重新打開表後 -
Devart。感謝您的迴應,但正如我已經提到的不是現有的表格。這些列應該在我創建新表時自動添加。 –
只需創建一個新的'DDL'觸發器並將此查詢放入觸發器主體。 – Devart
Devart。我做了但沒有結果。 –
使用觸發器,之後每插入 –
@Nadeem_MK我想創建表時,他指的是執行。我不確定是否有可能... – Szymon
雷內。有已存在的職位,其中存儲的proc被定義爲在現有表中添加列,但我在談論創建時每個表的默認列。 –