如果我有一个存储过程说
CREATE PROCURE w AS
ALTER TABLE t ADD x char(1)
UPDATE t set x =1
即使它允许我创建该存储过程(如果我在 x 存在时创建它),当它运行时,UPDATE 语句也会出现错误,因为列 x 不存在。
处理这个问题的常规方法是什么,它必须一直出现?我可以通过将 UPDATE 放在 EXEC 中来解决它,还有另一种/更好的方法吗?
谢谢
如果我有一个存储过程说
CREATE PROCURE w AS
ALTER TABLE t ADD x char(1)
UPDATE t set x =1
即使它允许我创建该存储过程(如果我在 x 存在时创建它),当它运行时,UPDATE 语句也会出现错误,因为列 x 不存在。
处理这个问题的常规方法是什么,它必须一直出现?我可以通过将 UPDATE 放在 EXEC 中来解决它,还有另一种/更好的方法吗?
谢谢
ALTER TABLE
在第一笔交易UPDATE
的背景下和第二笔交易的背景下:
CREATE PROCEDURE w
AS
BEGIN TRAN
ALTER TABLE ..
COMMIT
BEGIN TRAN
UPDATE ..
COMMIT
END
您可以添加具有默认值的列,而不是像这样添加列然后更新其值
CREATE PROCEDURE w AS
ALTER TABLE t ADD x char(1) NOT NULL CONSTRAINT abc DEFAULT 1
您遇到的问题是,在为您的过程执行创建之前,您的更新正在针对现有表进行验证。
如果您致力于此,您所要做的就是确保在创建/更改过程时表不存在,由于不存在的对象,这会使解析器沿着延迟的名称解析路径前进。
创建过程后,您可以创建表。
我假设你的进程已经删除/创建了表,或者你真的不需要这样的过程。
我认为您应该在 Create 之后添加一个 GO 语句。
Sql server 将发送创建,然后您的更新将正常工作。