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)
必须先创建该列,然后才能解析使用它的查询.您可以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)