我正在尝试创建一个存储过程,该过程将添加一个新列,然后将该列设置为一个值:
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
,但查询开始执行。
如何将这两个语句放在一个过程中?
答案 0 :(得分:3)
问题在于该过程在执行之前已被编译。我认为在存储过程中解决此问题的唯一方法是动态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;