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

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

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

最佳答案

问题是程序在执行之前被编译。我认为在存储过程中解决这个问题的唯一方法是动态 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/

相关文章:

sql-server - 将所有表的日期更改为sql server中的日期时间数据类型

sql-server - 在 MS SQL Server 2005 中获取日期的周数?

sql-server - TSQL可以从 bool 值转换为BIT吗

java - 通过 Java 存储过程输出参数

sql - 使用 IN 运算符优化 MySQL 查询

mysql - 如何在sql中使用password()?

sql - MS Access Year(Date() 函数

c# - T-SQL LIKE与ASP.net参数中的通配符

oracle - 如何调用 Oracle 过程

mySQL 存储过程返回所有行多个约束