问题:
我在数据库中有2个表:
TableA TableB
X, Y, Z X, Y, Z
如果我将列W添加到表A,我想将其自动复制到具有相同名称和数据类型的表B(不明确写入)。
部署限制:
使用更新脚本更新表(因此必须能够在tsql中调用/执行)。 有多个表可以更新(但是我可以根据需要手动编写映射)
示例更新脚本:
IF NOT EXISTS (SELECT 1 FROM SYS.COLUMNS C INNER JOIN SYS.TABLES T ON C.OBJECT_ID = T.OBJECT_ID
WHERE C.NAME = 'W' AND T.NAME = 'TableA')
BEGIN
ALTER TABLE TableA ADD W [Int] NULL
END
GO
在这个脚本的末尾,我想添加我的'SyncMyTables'SQL
从我的研究到目前为止,我找到了3种可能的方法来解决这个问题:
选项1似乎对我来说最明智。
我需要什么帮助:
关于如何最好地解决这个问题的一些指导。
向我指出正确方向的一个例子。
干杯
请注意,我不想保持列的内容同步,我需要保留表格设计
答案 0 :(得分:1)
可以使用DDL触发器实现列重复:
CREATE TRIGGER DDL_TableA_TableB
ON database
FOR ALTER_TABLE
AS
BEGIN
Declare @CommandText nvarchar(1000)
SELECT @CommandText = EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','SYSNAME');
if left(@CommandText, 26) = 'ALTER TABLE dbo.TableA ADD'
begin
set @CommandText = replace( @CommandText, 'TableA', 'TableB')
exec sp_executesql @CommandText
end
end