我有以下代码:
-- start of code set noexec off declare @requiredVersion int declare @currentVersion int set @requiredVersion = 5 set @currentVersion = 4 if (@currentVersion < @requiredVersion) begin print 'Please update your DB to version 5 before running this script.' set noexec on end go -- print 'Dummy' insert into tblFooBar(name) values ('AAA') go set noexec off -- end of code
请注意,数据库中不存在表"tblfoobar".当我运行此代码时,消息出现:
Please update your DB to version 5 before running this script. Msg 208, Level 16, State 1, Line 1 Invalid object name 'tblFooBar'.
我原以为将noexec设置为ON可能不会给消息中的"Msg 208"部分.
然后再次"设置noexec on"编译代码,不执行它.试图将一些东西插入到一个不存在的表中是一个编译时错误 - 我猜.如果是这种情况,那么应该出现关于"缺失对象"的错误.
现在让我告诉你我观察到的奇怪行为.如果我删除" - ''dummy'"行中的注释
-- start of code set noexec off declare @requiredVersion int declare @currentVersion int set @requiredVersion = 5 set @currentVersion = 4 if (@currentVersion < @requiredVersion) begin print 'Please update your DB to version 5 before running this script.' set noexec on end go print 'Dummy' insert into tblFooBar(name) values ('AAA') go
并执行代码,我只收到以下消息.
在运行此脚本之前,请将您的数据库更新到版本5.
这次没有关于丢失表的消息.
有人可以向我解释一下这种行为吗?谢谢.