0

我需要在现有表中添加一个附加列,然后为现有记录插入适当的列值。我需要在单个存储过程中执行此操作。

到目前为止,我有以下内容(SQL Management Studio 报告它找不到新列以将值添加到现有记录):

    BEGIN
    ALTER TABLE tbl1
    ADD col_add int

    UPDATE tbl1
    SET [col_add]='value'
    WHERE col_pk = 1
    END

我尝试在 ALTER 和 UPDATE 语句之间添加一个“GO”关键字,但随后它报告了一个语法错误。

提前致谢。

4

2 回答 2

2

我认为您必须提交“更改表”,然后进行更新,并且不要忘记也提交更新:

 BEGIN
  BEGIN TRAN
    ALTER TABLE tbl1
    ADD col_add date
COMMIT;
   BEGIN TRAN
    UPDATE tbl1
    SET [col_add]='value'
    WHERE col_pk = 1
COMMIT;
    END
于 2013-04-26T12:19:17.120 回答
2

解析时出现表名错误。在 SSMS 中,go之所以有效,是因为它分隔了批次。但是存储过程始终是一个批处理。

您可以在存储过程中使用execsp_executesql强制进行新一轮解析:

exec ('UPDATE tbl1 SET [col_add]='value' WHERE col_pk = 1')
于 2013-04-26T12:20:11.183 回答