我有一个我正在处理的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
Run Code Online (Sandbox Code Playgroud)
现在我认为BEGIN/END块会将这两个项目分开,但是我收到错误"无效的列名'ColumnThree'." 当我试图运行它.为什么?第一个BEGIN/END不应该设置ColumnThree以及IF(EXISTS应该保护UPDATE语句在该列名称不存在时运行).
做这样的事的正确方法是什么?(我似乎有几个类似的情况需要这样做).
你需要GO,没有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
Run Code Online (Sandbox Code Playgroud)
如果您使用多个模式,您也需要sys.schemas进入检查.
| 归档时间: |
|
| 查看次数: |
7402 次 |
| 最近记录: |