【问题标题】:How to alter table add column then update within single script?如何更改表添加列然后在单个脚本中更新?
【发布时间】:2013-06-12 05:45:28
【问题描述】:

我们有一个自定义数据库更新程序,它在 SQL Server 上运行各种 SQL 脚本。一些脚本需要向表中添加新列,然后在单个脚本中填充值:

using (var scope = new TransactionScope()) {

    ... alter table MyTable add FOOBAR int;
    ... update schappointment set FOOBAR = 1;

}

问题是,SQL 吐出“无效的列名 'FOOBAR',因为“alter table”命令尚未生效。将其包装在 exec() 中没有任何区别:

    ... exec('alter table MyTable add FOOBAR int;')
    ... update schappointment set FOOBAR = 1;

它在 SQL Management Studio 中运行良好,因为它使用 GO 命令(我知道这不是有效的 T-SQL 命令)将其拆分。

我不想在项目中创建任何新的依赖项。

我的偏好是不拆分模式和数据脚本,因为这会使脚本数量翻倍,除了让 SQL 满意。

我该如何解决这个问题?

【问题讨论】:

  • 这个问题对你有帮助吗? stackoverflow.com/questions/40814/…
  • SQL 服务器。 Blorgbeard - 我以前看过这个页面,我的偏好是不引入对 SMO 的依赖。不过,如果没有更好的选择,可以这样做。
  • 把更新语句放入exec怎么样?

标签: sql sql-server alter


【解决方案1】:

您不能完全在单个语句(或批处理)中执行此操作,而且您使用的工具似乎不支持 GO 作为批处理分隔符。

您可以使用EXEC 在子批次中运行它。

ALTER TABLE A
  ADD c1 INT, c2 VARCHAR(10);

EXEC('
UPDATE A
SET    c1 = 23,
       c2 = ''ZZXX'';
    ');

注意:查询中的所有单引号都需要像上面那样加倍以在字符串文字中转义它们。

我尝试了这种方法,这是有效的。

alter table then update in single statement

【讨论】:

    【解决方案2】:

    我们的解决方案是在整个脚本中添加“GO”命令,并自定义我们的脚本执行功能以将它们拆分并单独运行。

    这模仿了 SQL 管理工作室所做的并且似乎有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-25
      • 2015-09-03
      • 2016-11-04
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多