我有一堆表和一堆约束,阻止我从excel导入数据。我知道我必须使用alter table“MyTableName”nocheck约束“MyConstraints”来禁用约束,并在导入完成时启用它们。
因为有很多表有很多约束,所以我试图从脚本中更新所有内容。
我将要禁用的表的所有名称都禁用到另一个名为MyTableList的表中,其中唯一的列是我要禁用的所有表的名称。
然后我使用以下脚本来希望禁用约束,但我不断收到语法错误。 (没有alter table命令,我的脚本运行正常)。
如何解决这个问题并让脚本运行(手动启用和禁用可以工作但是太耗时) 以下是我的脚本:
declare @TableInQuestion nvarchar(150)
declare @ConstraintInQuestion nvarchar(150)
declare MyConstraintToDisable cursor
local static read_only forward_only
for
SELECT OBJECT_NAME(sys.objects.object_id) AS ConstraintName,
OBJECT_NAME(sys.objects.parent_object_id) AS TableName
FROM sys.objects INNER JOIN
MyTableList
ON OBJECT_NAME(sys.objects.parent_object_id) = MyTableList.Description
WHERE (sys.objects.type_desc LIKE '%CONSTRAINT')
open MyConstraintToDisable
fetch next from MyConstraintToDisable
into @ConstraintInQuestion, @TableInQuestion
while @@FETCH_STATUS=0
begin
print @ConstraintInQuestion+', '+ @TableInQuestion
alter table @TableInQuestion nocheck constraint @ConstraintInQuestion
print 'Done'
fetch next from MyConstraintToDisable
into @ConstraintInQuestion, @TableInQuestion
end
close MyConstraintToDisable
deallocate MyConstraintToDisable
它一直说语法alter table不正确。请帮忙。我是sql编程的新手。
答案 0 :(得分:0)
要在SQL语句中使用变量的值,您需要构建一个字符串然后执行该字符串。所以我会更改你目前拥有的那条线
alter table @TableInQuestion nocheck constraint @ConstraintInQuestion
这样的事情(未经测试)
声明@sql nvarchar(max)='alter table ['+ @TableInQuestion +'] nocheck约束['+ @ConstraintInQuestion +']'
EXEC(@sql)