SQL脚本不起作用,但个别查询有效

时间:2013-10-11 11:22:41

标签: sql sql-server tsql

我使用以下脚本向表中添加列。当我在查询窗口中点击 F5 时,它会在fkRefTabNo不存在的第二次更新查询中出错。

ALTER TABLE EPFieldSQLScripts
ADD fkRefTabNo int  DEFAULT 1

update EPFieldSQLScripts
set fkRefTabNo = 1
where fkRefTabNo is null

ALTER TABLE EPFieldSQLScripts
ALTER COLUMN fkRefTabNo INTEGER NOT NULL

但是当我逐个运行这些查询时,它不会给出错误。谁能告诉我这个脚本有什么问题?

4 个答案:

答案 0 :(得分:3)

在语句之间加上GO。这样,每个语句的结果将在运行下一个语句之前提交(每个语句将是一个单独的事务)。

ALTER TABLE EPFieldSQLScripts
ADD fkRefTabNo int  DEFAULT 1

GO

update EPFieldSQLScripts
set fkRefTabNo = 1
where fkRefTabNo is null

GO

ALTER TABLE EPFieldSQLScripts
ALTER COLUMN fkRefTabNo INTEGER NOT NULL 

答案 1 :(得分:1)

正如其他人已经回答的那样,添加GO是解决方案。这不是原因虽然

SQL Server正在尝试将整个脚本作为单个事务运行,然后仅在脚本完成时将数据提交到数据库。

update EPFieldSQLScripts
set fkRefTabNo = 1
where fkRefTabNo is null

运行(并且排队准备好提交),字段fkRefTabNo实际上没有被添加到数据库表(仅在提交时发生)。添加GO语句 - 或者单独运行每个语句 - 在继续下一个语句之前将事务提交到数据库,这就是为什么你会看到行为上的差异。

答案 2 :(得分:0)

尝试在每个语句之间添加GO,结果应与单独执行每个语句相同。

答案 3 :(得分:0)

放在每个查询语句的末尾

喜欢

ALTER TABLE EPFieldSQLScripts ADD fkRefTabNo int  DEFAULT 1;

update EPFieldSQLScripts set fkRefTabNo = 1 where fkRefTabNo is null;

ALTER TABLE EPFieldSQLScripts;

ALTER COLUMN fkRefTabNo INTEGER NOT NULL;

现在它必须一起工作。