无法更新新创建的列

您好,我要更改一个SQL表,在其中要添加新列A,并根据另一列B的值设置其默认值。我这样做吗?

到目前为止,我已经尝试过:

IF NOT EXISTS(SELECT *FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='T' AND COLUMN_NAME='B')
BEGIN
ALTER TABLE T ADD B bit default 0;
UPDATE T
SET B = A

我不断收到错误消息:

Msg 207,Level 16,State 1,Line 23
Invalid column name 'B'.

PS :我想自动执行两条语句(更改表并更新新创建的列)

我原以为这是IntellisenseMSSQL的问题,但是能够按顺序运行命令。

更新

我也试图将语句分成两部分,但仍然无济于事:

IF NOT EXISTS(SELECT *FROM INFORMATION_SCHEMA.COLUMNS 
              WHERE TABLE_NAME='T' AND COLUMN_NAME='B')
ALTER TABLE T ADD B bit default NULL;

UPDATE T
SET B = A
WHERE B = NULL
END
iCMS 回答:无法更新新创建的列

在运行批处理之前,数据引擎将对其进行解析,并且会引发任何语法错误和无效的对象引用。不幸的是,某些DDL语句不计入后面的语句中。首先,如果我们big_df.head(npartitions=-1)并尝试CREATE到表中,则可以正常工作:

INSERT

另一方面,如果我们然后尝试(在单独的批次中)CREATE TABLE dbo.YourTable (A bit); INSERT INTO dbo.YourTable (A) VALUES(1),(0),(1),(0); 表,然后ALTER所述列的值,则该批次将失败(如您的示例):

UPDATE

一种方法是将语句分成不同的批次,但是,您将无法将两个语句都包装在ALTER TABLE YourTable ADD B bit default 0; UPDATE YourTable SET B = A 中。因此,在这种情况下,最好稍后用IF执行该语句,以在批处理中对该语句进行解析:

sys.sp_executesql
,

您需要在alter和update之间使用“ GO”命令。

ALTER TABLE YourTable ADD B bit default 0;
GO
UPDATE YourTable
SET B = A

 IF NOT EXISTS(SELECT *FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='T' AND COLUMN_NAME='B')
    BEGIN
      ALTER TABLE T ADD B bit default 0;
      EXEC ('UPDATE product SET B = 1')
END

IF NOT EXISTS(SELECT *FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='T' AND COLUMN_NAME='C')
    BEGIN
      ALTER TABLE T ADD C varchar(20) default null;
      EXEC ('UPDATE product SET C = ''test''')
END
本文链接:https://www.f2er.com/2073970.html

大家都在问