Отличный образец, 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