SQL Server - 更改多表中显示的列的定义

时间:2017-07-31 09:41:44

标签: sql sql-server

我的数据库中的许多表都有一个布尔列'IsDeleted'。

我需要更改所有表中的列,默认值为零,然后将值为null的所有旧记录更新为零值。

除了为每个表编写脚本之外,还有办法吗?

谢谢,

3 个答案:

答案 0 :(得分:1)

这将是生成所需的CReate,Update和Rename脚本的良好起点。咨询:首先测试数据库的备份。

     select  
'ALTER TABLE dbo.' + O.Name + ' ADD IsDeletedNew bit default 0;
 UPDATE dbo.' + O.Name + ' SET IsDeletedNew = 1 WHERE IsDeleted = 1;
 UPDATE dbo.' + O.Name + ' SET IsDeletedNew = 0 WHERE IsDeleted = 0 OR IsDeleted IS NULL;
 ALTER TABLE dbo.' + O.Name + ' DROP COLUMN IsDeleted;
 EXECUTE sp_rename N''dbo.' +  O.Name + '.IsDeletedNew'', N''Tmp_IsDeleted_1'', ''COLUMN''
 EXECUTE sp_rename N''dbo.' +  O.Name + '.Tmp_IsDeleted_1'', N''IsDeleted'', ''COLUMN'' '

from syscolumns C
Inner join sysobjects o on C.ID = O.ID
where c.name = 'IsDeleted'

答案 1 :(得分:0)

如果有这么多表,请使用动态SQL <{1}}

alter

冲洗并重复以更新值,删除旧列,然后更新新列

答案 2 :(得分:0)

首先,我可以为布尔字段设置默认值。它对我有用。

.entry

这是我的脚本,为每个&#39; IsDeleted&#39;设置默认值。没有defualt值的字段。它对我有用。

#data