【发布时间】:2022-01-14 02:41:12
【问题描述】:
我有多个表,例如大约 2000 个表,其中少数表是启用了 change_tracking 的表。我只需要向那些 change_tracking_enabled 表添加额外的列。
我的代码正在向所有 2000 个表添加列。我只需要为 CHANGE_TRACKING_ENABLED 表添加列。请帮帮我
- 这是我显示 change_tracking_enabled 表的代码。
USE Test GO SELECT s.name as Schema_name, t.name AS Table_name, tr.* FROM sys.change_tracking_tables tr INNER JOIN sys.tables t on t.object_id = tr.object_id INNER JOIN sys.schemas s on s.schema_id = t.schema_id - 这是我将列添加到所有 2000 个表的代码。
USE TestDB GO --Declare Variables DECLARE @TableName VARCHAR(100) DECLARE @TableSchema VARCHAR(100) DECLARE @COLUMN_NAME VARCHAR(50) SET @COLUMN_NAME='ddtm' -- Change Column Name according to your requirement DECLARE @COLUMN_DATATYPE VARCHAR(50) SET @COLUMN_DATATYPE='DateTime' -- Provide data type for column --Declare Cursor DECLARE CUR CURSOR FOR SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' --OPEN CURSOR OPEN CUR --Fetch First Row FETCH NEXT FROM CUR INTO @TableSchema,@TableName --Loop WHILE @@FETCH_STATUS = 0 BEGIN DECLARE @SQL NVARCHAR(MAX) SET @SQL=NULL IF NOT EXISTS ( SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=@TableName AND COLUMN_NAME=@COLUMN_NAME and Table_Schema=@TableSchema) BEGIN SET @SQL='ALTER TABLE '+@TableSchema+'.'+@TableName +' ADD '+@COLUMN_NAME + ' '+@COLUMN_DATATYPE PRINT @SQL EXEC ( @SQL) END IF EXISTS ( SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=@TableName AND COLUMN_NAME=@COLUMN_NAME and Table_Schema=@TableSchema) BEGIN PRINT 'Column Already exists in Table' END FETCH NEXT FROM CUR INTO @TableSchema,@TableName END --Close and Deallocate Cursor CLOSE CUR DEALLOCATE CUR
【问题讨论】:
-
似乎您只需要检查在将数据放入您的
CURSOR的查询中是否启用了更改跟踪。这回答了你的问题了吗? How to check if change tracking is enabled on a specific table -
不...我只需要向 change_tracking_enabled 表添加额外的列。
-
是的,但是您在
CURSOR中获取数据的查询不是您在步骤 1 中使用的查询;您要求 所有 表...使用您在第 1 步中的查询... -
我不知道如何添加它...我是编程新手。
标签: sql sql-server tsql