修改表结构后更新数据

8

如何在Transact SQL中实现此操作。

我想要在现有表格中添加新列,并将其更新为某些值。是否可以在一个SQL脚本中完成,还是应该使用单独的脚本?

以下是示例代码:

 ALTER TABLE my_table ADD my_new_column bit NULL;

 UPDATE my_table SET my_new_column = 0;

我知道我在创建列之前就写入数据了,所以这两行代码不起作用。但是如何在一个脚本中实现这个目标呢?比如使用一些延迟或者确保列已经被创建并且可以写入数据?

我使用了IF EXISTS和从表中选择的方法,但是它没有起作用。

谢谢。

1个回答

18

你可以通过添加默认值并使用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)更新多个字段,该怎么办?我尝试了这个查询,它运行良好,但我仍然想使用update。 - Vlad
2
你可以用相同的方式添加多个列和默认约束。除此之外,最好将DDL与DML分开批处理以避免解析问题(可以在语句之间添加“GO”,也可以根据需要使用“EXEC”来进行)。 - Martin Smith
哇,感谢您的建议。是的,DDL应该始终与DML分开。在这种情况下,我需要一个简单的脚本来完成简单的任务。无论如何,我使用了这里的答案,带有GO语句,它按照我的预期工作了https://dev59.com/CkjSa4cB1Zd3GeqPJvHL - Vlad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接