0

我正在使用以下脚本向表中添加一列。当我在查询窗口中点击时,它会在第二个不存在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

4 回答 4

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 
于 2013-10-11T11:24:37.903 回答
1

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

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

update EPFieldSQLScripts
set fkRefTabNo = 1
where fkRefTabNo is null

正在运行(并排队等待提交),该字段fkRefTabNo实际上并未添加到数据库表中(仅在提交时发生)。添加GO语句 - 或单独运行每个语句 - 在继续下一条语句之前将事务提交到数据库,因此您会看到行为差异。

于 2013-10-11T11:29:05.110 回答
0

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

于 2013-10-11T11:24:58.717 回答
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;

现在它必须一起工作。

于 2013-10-11T11:26:06.457 回答