我首先检查列是否存在。如果没有,那么我重命名现有列,然后尝试更改其数据类型。但是当我运行脚本时,我得到错误Invalid column name Age
if Not exists(select * from sys.columns
where Name = 'Age' and Object_ID = Object_ID('TestTable'))
begin
EXEC sp_RENAME 'TestTable.Name' , 'Age', 'COLUMN'
ALTER TABLE TestTable ALTER COLUMN Age int
Update TestTable set Age = 0
ALTER TABLE TestTable ALTER COLUMN Age int Not Null
end
我在这里做错了什么?
答案 0 :(得分:1)
试试这个。将If条件与Not Exists
和exists
分开。
if Not exists(select * from sys.columns
where Name = 'Age' and Object_ID = Object_ID('TestTable'))
BEGIN
EXEC sp_RENAME 'TestTable.Name' , 'Age', 'COLUMN'
END
GO
if exists(select * from sys.columns
where Name = 'Age' and Object_ID = Object_ID('TestTable'))
begin
ALTER TABLE TestTable ALTER COLUMN Age int
Update TestTable set Age = 0
ALTER TABLE TestTable ALTER COLUMN Age int Not Null
END
GO
修改强>:
关于来自here
的SQL中的批处理无法更改表,然后在中引用新列 同一批。
因此,在同一批次中重命名和更改不起作用。
执行一批SQL语句时发生错误,
- 批次中没有任何陈述被执行。