次のことができるSQLサーバーDDLスクリプトをどのように記述しますか。
データベース内の各テーブルについて:
add column CreatedBy
add column CreateDate
add column UpdatedBy
add column UpdatedDate
また、特定の列がテーブルに既に存在する場合は、その列をスキップしてください。
また、逆に、テーブルごとに、これらの 4 つの列を削除します。
次のことができるSQLサーバー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