如何在SQL脚本中创建新列后立即引用它们

cod*_*der 2 sql sql-server-2008

如何编写我的SQL脚本以确保我的新列在创建后的后续行中可见.

这是我的SQL的一般形式:

BEGIN TRANSACTION

  if (not exists(select 1 from THIS_TABLE))
      BEGIN
        ALTER TABLE THIS_TABLE add THIS_COLUMN int
      END
COMMIT

BEGIN TRANSACTION

    IF (NOT EXISTS (SELECT 1 FROM THIS_TABLE
            WHERE THIS_COLUMN = 1))
    BEGIN
            UPDATE THIS_TABLE SET THIS_COLUMN = 1 
    END

COMMIT
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

Invalid column name 'THIS_COLUMN'. 
Run Code Online (Sandbox Code Playgroud)

在这条线上:

        IF (NOT EXISTS (SELECT 1 FROM THIS_TABLE
            WHERE THIS_COLUMN = 1))
Run Code Online (Sandbox Code Playgroud)

And*_*mar 8

必须先创建该列,然后才能解析使用它的查询.您可以update使用"go"关键字将其放入不同的批处理中来完成此操作:

alter table t1 add c1 int
go
update t1 set c1 = 1
Run Code Online (Sandbox Code Playgroud)

或者通过将第二个事务作为动态SQL运行:

alter table t1 add c1 int
exec ('update t1 set c1 = 1')
Run Code Online (Sandbox Code Playgroud)