Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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
ALTER NOCHECK约束附近的语法不正确-SQL Server 2008_Sql_Sql Server 2008_Bcp_Alter - Fatal编程技术网

ALTER NOCHECK约束附近的语法不正确-SQL Server 2008

ALTER NOCHECK约束附近的语法不正确-SQL Server 2008,sql,sql-server-2008,bcp,alter,Sql,Sql Server 2008,Bcp,Alter,我试图使用BCP命令通过ALTER语句禁用表的约束。我的代码如下: SET @disableConstraints = 'SQLCMD -E -S server-Name -d '+@databaseName+' -Q "EXEC sp_MSforeachtable @command1 = ALTER TABLE '+@schemaName+'.'+@tableName+' NOCHECK CONSTRAINT ALL;" >> Z:\Log\ErrorLog.txt' 但是,当我

我试图使用BCP命令通过ALTER语句禁用表的约束。我的代码如下:

SET @disableConstraints = 'SQLCMD -E -S server-Name -d '+@databaseName+' -Q "EXEC sp_MSforeachtable @command1 = ALTER TABLE '+@schemaName+'.'+@tableName+' NOCHECK CONSTRAINT ALL;" >> Z:\Log\ErrorLog.txt'
但是,当我执行
xp\u cmdshell
命令时,
ErrorLog.txt
将打印一个错误,说明:

Msg 156,第15级,状态1,服务器名称,第1行
关键字“ALTER”附近的语法不正确

我一直在摆弄单引号和双引号,但我一无所获


有人能帮忙找出语法错误吗

您错过了alter之前的双引号

SET @disableConstraints = 'SQLCMD -E -S server-Name -d ' + @databaseName + ' -Q EXEC sp_MSforeachtable @command1 = "ALTER TABLE ' + @schemaName + '.' + @tableName + ' NOCHECK CONSTRAINT ALL;" >> Z:\Log\ErrorLog.txt'

在您的游标中,仅使用此查询:

DECLARE @sql nvarchar(max);
DECLARE tables_cursor FOR...
OPEN tables_cursor;

WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT QUOTENAME(@schemaName)+'.'+QUOTENAME(@tableName);
    set @sql = 'ALTER TABLE '+QUOTENAME(@schemaName)+'.'+QUOTENAME(@tableName)+' NOCHECK CONSTRAINT ALL;';
    EXEC sp_executesql @sql;

    FETCH NEXT FROM tables_cursor INTO @schemaName, @tableName;
END
CLOSE tables_cursor;
DEALLOCATE tables_cursor;

如果所有操作都在同一服务器和数据库上执行,则不需要使用sqlcmd并连接到另一台服务器。使用EXEC的动态SQL,并将执行此操作。

在ALTER的开头和ALL的结尾需要两个单引号

SET @disableConstraints = 'SQLCMD -E -S server-Name -d '+@databaseName+' -Q "EXEC sp_MSforeachtable @command1 = ''ALTER TABLE '+@schemaName+'.'+@tableName+' NOCHECK CONSTRAINT ALL'';" >> Z:\Log\ErrorLog.txt'

它是在表(1)上还是在所有表上?
EXEC sp_MSforeachtable@command1=ALTER table
-您通常不希望传递给存储过程的字符串参数被引用吗?此命令在游标内执行,因此,假设它禁用一个表上的所有约束,然后循环到另一个表并执行相同的操作。它是否在另一台服务器上运行,并且光标在当前数据库上?或者同一数据库上的所有内容(游标和alter)?同一数据库上的游标和alter