Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 在SQL Server 2005中创建表之前禁用约束_Sql Server 2005 - Fatal编程技术网

Sql server 2005 在SQL Server 2005中创建表之前禁用约束

Sql server 2005 在SQL Server 2005中创建表之前禁用约束,sql-server-2005,Sql Server 2005,在使用T-SQL创建数据库表之前,是否可以禁用唯一和外键约束?。例如,在MySQL(在版本5.1中测试)中,如果您有一个创建数据库架构的SQL脚本,则可以将以下内容放入其中: /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; 在脚本的开头(在

在使用T-SQL创建数据库表之前,是否可以禁用唯一和外键约束?。例如,在MySQL(在版本5.1中测试)中,如果您有一个创建数据库架构的SQL脚本,则可以将以下内容放入其中:

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
在脚本的开头(在任何CREATETABLE语句之前),禁用上述约束。然后在脚本末尾,您可以使用以下命令再次启用它们

/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;

SQL Server 2005也有类似的功能吗?

我对MySQL不是非常熟悉,但我要实现您在SQL Server中尝试实现的目标,方法是从create table语句中删除约束定义,然后在脚本末尾添加约束,如下所示

Create table table1 (id int not null, val varchar(10))
Create table table2 (id int, t1id int, val varchar(10))
…做其他陈述

   Alter table table1 add 
        Constraint pk_table1 Primary Key (id)
    Alter table table2 Add 
        Constraint fk_table1 Foreign Key (t1id) References table1(id) 

这也是我推荐的技术。这或确保您的对象以正确的顺序创建。遗憾的是,对于我来说,此解决方案不是一个选项。我猜SQL Server中没有等效的方法。我不知道有什么方法可以全局禁用SQL Server中的约束。您能澄清一下为什么不能使用这种方法吗?要一次性对db中的所有表执行此操作,请使用未记录的ForEAchTable proc:sp_MSForEachTable“将计数(*)选择为“”?“”from?”谢谢您的提示,我将对此进行检查。