我正在使用包含对数据库的更改的脚本,这些更改可以使数据库暂时处于无效状态。目前我在开始时禁用所有约束,然后在脚本末尾使用以下代码重新启用它们:
/*** Disable all constraints ***/
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"
/*** Enable all constraints ***/
EXEC sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
但这不会禁用空约束,正如我所读到的那样,空约束的处理方式与 FK 约束不同。
我认为有必要更改所有表以使它们允许为空,然后在脚本末尾再次更改它们。
我不能“硬编码”表的名称,因为我没有这些信息,所以我不能做很多陈述,比如:
ALTER TABLE someTable ALTER COLUMN someColumn INT NULL
它需要是动态的。关于如何实现这一目标的任何想法?
编辑:
我无法处理的一种情况是向现有表添加一个新的非空列。我无法控制添加此列的脚本(它是由自动化工具创建的),创建的脚本是ALTER TABLE someTable ADD someColumn INT NOT NULL
,在此语句之后发生一些删除/插入/更新,使其someTable
处于有效状态,但发生错误在ALTER
声明上