因此,我有一个查询,应该将主键添加到id字段:
IF NOT EXISTS(SELECT *
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'PRIMARY KEY' AND TABLE_NAME = 'CAL')
BEGIN
DROP INDEX IF EXISTS CAL$01 ON dbo.CAL;
ALTER TABLE BTS.dbo.CAL
ALTER COLUMN Intern INT NOT NULL;
ALTER TABLE BTS.dbo.CAL
ADD CONSTRAINT PK_CAL_Intern PRIMARY KEY (Intern);
CREATE INDEX CAL$01
ON CAL (Intern);
END
问题是当我选择所有这些代码并执行( F5
),我得到这个错误:
然而,当我一个接一个地选择每一个语句时,它都会像预期的那样工作:
我确信 IF
按预期工作
我试着用 GO
在陈述之间,这是不允许的。
我应该在大量的表上执行这个代码
也许我对SQLServerManagementStudio如何执行语句一无所知
2条答案
按热度按时间9rbhqvlz1#
在运行查询之前,将对其进行分析。这就是为什么你所做的是失败的。sql server正在检查
Intern
在脚本运行之前。当你开始尝试运行脚本时,Intern
在table上BTS.dbo.CAL
是NULL
所以脚本失败了。可以通过运行语句在单独的作用域中创建主键cosntraint来解决此问题:
c3frrgcw2#
尽管问题就是答案,但我只想再增加一个选项。
您可以将语句分为两个单独的批,以便您的更改可用于后续批