使用脚本禁用表中的约束 - sql server

时间:2014-01-02 15:24:36

标签: sql-server tsql

我有一堆表和一堆约束,阻止我从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编程的新手。

1 个答案:

答案 0 :(得分:0)

要在SQL语句中使用变量的值,您需要构建一个字符串然后执行该字符串。所以我会更改你目前拥有的那条线

  

alter table @TableInQuestion nocheck constraint @ConstraintInQuestion

这样的事情(未经测试)

  

声明@sql nvarchar(max)='alter table ['+ @TableInQuestion +'] nocheck约束['+ @ConstraintInQuestion +']'

     

EXEC(@sql)