【问题标题】:Alter table then update改变表然后更新
【发布时间】:2012-09-18 07:48:57
【问题描述】:

如何在事务 sql 中实现这一点。

我想向现有表添加新列,然后用一些值更新它。是否可以在一个 sql 脚本中完成,或者我应该使用单独的脚本?

这是一个示例代码

 ALTER TABLE my_table ADD my_new_column bit NULL;

 UPDATE my_table SET my_new_column = 0;

我知道我正在写作,而该列仍然不存在,所以这就是这两行不起作用的原因。但是如何在一个脚本中实现这一点,即使用一些延迟或如何确保创建列然后向其写入数据?

我将 IF EXISTS 与从表中选择一起使用,但它不起作用。

谢谢

【问题讨论】:

    标签: sql database tsql


    【解决方案1】:

    您可以通过添加默认值并使用WITH VALUES 子句来添加新列并同时填充它。如果不再需要,您可以在最后删除默认值。这种方法可以用于多个列,如下所示。

    ALTER TABLE [myTable]
    ADD [my_new_column] [bit] NULL CONSTRAINT DF_TMP DEFAULT 0 ,
        [my_new_column2] [bit] NULL CONSTRAINT DF_TMP2 DEFAULT 1 WITH VALUES;
    
    ALTER TABLE [myTable] DROP DF_TMP, DF_TMP2
    

    【讨论】:

    • 如果我想用从 0 开始的不同值更新多个字段,比如 1,该怎么办?试过这个查询效果很好,但我还是想在之后使用更新。
    • 您可以以相同的方式添加多个列和默认约束。除此之外,通常最好在与 DML 不同的批次中执行 DDL 以避免解析问题(通过在语句之间添加 GO 或使用 EXEC,具体取决于您需要执行此操作的上下文)
    • 哇,感谢您的建议。是的,DDL 应该始终与 DML 分开。在这种情况下,我需要简单的脚本来完成简单的任务。无论如何,我在这里用 GO 语句使用了这个答案,它按我的预期工作stackoverflow.com/questions/1293638/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 2019-09-26
    • 2022-11-17
    • 2022-11-22
    • 2018-08-30
    相关资源
    最近更新 更多