我正在处理一个 SQL 脚本,当我创建(或编辑)列然后尝试修改该新列时遇到问题。
例如:
BEGIN
ALTER TABLE SampleTable ADD ColumnThree int
END
IF (EXISTS (SELECT * FROM sys.columns WHERE name = 'ColumnThree'))
BEGIN
UPDATE SampleTable SET ColumnThree = 0
END
现在我认为 BEGIN/END 块会将这两个项目分开,但我收到错误“无效的列名称 'ColumnThree'”。当我尝试运行这个时。为什么?第一个 BEGIN/END 不应该设置 ColumnThree 及更多,如果该列名不存在,IF(EXISTS 应该保护 UPDATE 语句不被运行。
做这样的事情的正确方法是什么? (我似乎有几个类似的场景需要这样做)。
你需要GO http://msdn.microsoft.com/en-us/library/ms188037.aspx, not BEGIN/END
。另外,您可能想编辑您的EXISTS
查询一下以确保您获得正确的表:
ALTER TABLE SampleTable ADD ColumnThree int
GO
IF (EXISTS
(SELECT 1
FROM
sys.columns c
INNER JOIN sys.tables t ON
c.object_id = t.object_id
WHERE
t.name = 'SampleTable'
AND c.name = 'ColumnThree'))
BEGIN
UPDATE SampleTable SET ColumnThree = 0
END
如果您使用多个模式,您将需要通过sys.schemas
也进入支票。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)