当前位置:  开发笔记 > 编程语言 > 正文

SET NOEXEC如何工作?

如何解决《SETNOEXEC如何工作?》经验,为你挑选了0个好方法。

我有以下代码:

-- 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.

这次没有关于丢失表的消息.

有人可以向我解释一下这种行为吗?谢谢.

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有