在单个存储过程中更改表和更新列?

时间:2018-12-28 18:40:12

标签: sql sql-server stored-procedures

我正在尝试创建一个存储过程,该过程将添加一个新列,然后将该列设置为一个值:

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,但查询开始执行。

如何将这两个语句放在一个过程中?

1 个答案:

答案 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;