5

如果我有一个存储过程说

CREATE PROCURE w AS

ALTER TABLE t ADD x char(1)

UPDATE t set x =1

即使它允许我创建该存储过程(如果我在 x 存在时创建它),当它运行时,UPDATE 语句也会出现错误,因为列 x 不存在。

处理这个问题的常规方法是什么,它必须一直出现?我可以通过将 UPDATE 放在 EXEC 中来解决它,还有另一种/更好的方法吗?

谢谢

4

4 回答 4

4

ALTER TABLE在第一笔交易UPDATE的背景下和第二笔交易的背景下:

CREATE PROCEDURE w
AS
   BEGIN TRAN
      ALTER TABLE ..
   COMMIT

   BEGIN TRAN
      UPDATE ..
   COMMIT
END
于 2010-06-09T11:12:50.620 回答
2

您可以添加具有默认值的列,而不是像这样添加列然后更新其值

CREATE PROCEDURE w AS 

ALTER TABLE t ADD x char(1) NOT NULL CONSTRAINT abc DEFAULT 1
于 2010-06-09T11:12:34.353 回答
0

您遇到的问题是,在为您的过程执行创建之前,您的更新正在针对现有表进行验证。

如果您致力于此,您所要做的就是确保在创建/更改过程时表不存在,由于不存在的对象,这会使解析器沿着延迟的名称解析路径前进。

创建过程后,您可以创建表。

我假设你的进程已经删除/创建了表,或者你真的不需要这样的过程。

于 2014-11-12T15:44:48.653 回答
-1

我认为您应该在 Create 之后添加一个 GO 语句。

Sql server 将发送创建,然后您的更新将正常工作。

于 2013-05-04T08:31:39.010 回答