Sql server 比较表列(类型、排序规则、可空…),并根据发现的差异更新第二个表列
我在同一台服务器上有两个数据库,分别名为“DB_prod”和“DB_test”,它们完全相同。 我需要假设有人可以修改“DB_prod”上的表。脚本需要查找所有列差异类型、排序规则、可空、最大长度+查找新列,并在“DB_测试”中将其更改为table。 表之间没有关系 第一步是找出差异,我知道如何做到这一点。 第二步是将所有更改移动到“DB_测试”。 目前我唯一的想法是使用动态sql,所以编写不同的表“alters”并在游标中执行它们 还有别的想法吗 所有工作都需要按程序完成Sql server 比较表列(类型、排序规则、可空…),并根据发现的差异更新第二个表列,sql-server,tsql,Sql Server,Tsql,我在同一台服务器上有两个数据库,分别名为“DB_prod”和“DB_test”,它们完全相同。 我需要假设有人可以修改“DB_prod”上的表。脚本需要查找所有列差异类型、排序规则、可空、最大长度+查找新列,并在“DB_测试”中将其更改为table。 表之间没有关系 第一步是找出差异,我知道如何做到这一点。 第二步是将所有更改移动到“DB_测试”。 目前我唯一的想法是使用动态sql,所以编写不同的表“alters”并在游标中执行它们 还有别的想法吗 所有工作都需要按程序完成 谢谢您可能正在寻找数
谢谢您可能正在寻找数据库范围的触发器。您可以使用它将alter table语句记录到table TriggerLog中,然后运行存储过程在测试表上执行这些语句
--Table to hold your event data.
CREATE TABLE TriggerLog
(
Event_Data NVARCHAR(MAX),
Username NVARCHAR(250),
Event_Date DATETIME
)
CREATE TRIGGER trg_alter_table ON DATABASE --database level trigger
FOR ALTER_TABLE
AS
INSERT TriggerLog
SELECT EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)'),
COALESCE(SUSER_SNAME(),USER_NAME()),
GETDATE();
GO
ALTER TABLE ProdTable
ADD column1 VARCHAR(100);
SELECT *
FROM triggerlog
结果:
Event_data Username Event_Date
------------------------------------------------------------------------------------------
ALTER TABLE ProdTable ADD column1 VARCHAR(100); Domain\User 2015-03-16 09:29:47.387
是否要保留驻留在DB_测试上的数据?否则,您可以只编写数据库脚本并重新部署它—删除旧的DB_测试?或者,您可以备份PROD数据库,并通过DB_测试使用replace恢复它?为什么不使用专门为此类任务设计的工具?例如,SSDT女士?你可以用它自动发布,不需要发明自行车。