如何编写一个 sql server DDL 脚本,它可以:
对于数据库中的每个表:
add column CreatedBy
add column CreateDate
add column UpdatedBy
add column UpdatedDate
此外,如果特定列已存在于表中,则跳过该列。
此外,它的反面,对于每个表,删除这 4 列。
如何编写一个 sql server DDL 脚本,它可以:
对于数据库中的每个表:
add column CreatedBy
add column CreateDate
add column UpdatedBy
add column UpdatedDate
此外,如果特定列已存在于表中,则跳过该列。
此外,它的反面,对于每个表,删除这 4 列。
DECLARE @TableName NVARCHAR(128)
DECLARE curTables CURSOR FAST_FORWARD FOR
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
OPEN curTables
FETCH NEXT FROM curTables INTO @TableName
WHILE (@@FETCH_STATUS = 0)
BEGIN
IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=@TableName AND COLUMN_NAME='CreatedBy')
EXECUTE ('ALTER TABLE [' + @TableName + '] ADD CreatedBy VARCHAR(50)')
IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=@TableName AND COLUMN_NAME='CreatedDate')
EXECUTE ('ALTER TABLE [' + @TableName + '] ADD CreatedDate DATETIME')
IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=@TableName AND COLUMN_NAME='UpdatedBy')
EXECUTE ('ALTER TABLE [' + @TableName + '] ADD UpdatedBy VARCHAR(50)')
IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=@TableName AND COLUMN_NAME='UpdatedDate')
EXECUTE ('ALTER TABLE [' + @TableName + '] ADD UpdatedDate DATETIME')
FETCH NEXT FROM curTables INTO @TableName
END
CLOSE curTables
DEALLOCATE curTables
然后相反的只是更改IF NOT EXISTS
为IF EXISTS
和 ALTER 语句的情况ALTER TABLE...DROP [ColumnName]
很棒的样本,AdaTheDev!但是,我对其进行了小改动,以忽略各种模式、视图和 aspnet 成员表中的表。如果您只想处理特定模式中的表,您可以轻松更改它。
这是我的版本:
DECLARE @TableName NVARCHAR(128)
DECLARE @TableSchema NVARCHAR(128)
DECLARE curTables CURSOR FAST_FORWARD FOR
select TABLE_SCHEMA, TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_TYPE='BASE TABLE' and (TABLE_SCHEMA not in ('schems1', 'schems2') and TABLE_NAME not like 'aspnet_%')
OPEN curTables
FETCH NEXT FROM curTables INTO @TableSchema, @TableName
WHILE (@@FETCH_STATUS = 0)
BEGIN
IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=@TableName AND COLUMN_NAME='Locked')
EXECUTE ('ALTER TABLE [' + @TableSchema + '].[' + @TableName + '] ADD Locked bit NOT NULL CONSTRAINT DF_' + @TableSchema + '_' + @TableName + '_Locked DEFAULT 0')
FETCH NEXT FROM curTables INTO @TableSchema, @TableName
END
CLOSE curTables
DEALLOCATE curTables