我正在尝试创建一个存储过程来添加一个新列,然后将该列设置为一个值:
CREATE PROCEDURE alter_then_update
AS
ALTER TABLE table_1
ADD bundle_type NVARCHAR(10);
UPDATE table_1
SET bundle_type = 'Small'
我不断收到一个错误,提示我有一个无效的列名 bundle_type
。我知道该列尚未创建。我不能将其存储在存储过程中并让代码逐行执行吗?分号不是按顺序执行的吗?我尝试使用 GO
但查询开始执行。
如何将这两个语句放入一个过程中?
最佳答案
问题是程序在执行之前被编译。我认为在存储过程中解决这个问题的唯一方法是动态 SQL:
CREATE PROCEDURE alter_then_update AS
BEGIN
ALTER TABLE table_1 ADD bundle_type NVARCHAR(10);
EXEC sp_executesql 'UPDATE table_1 SET bundle_type = ''Small''';
END;
关于sql - 在单个存储过程中更改表和更新列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53962968/