有没有办法检查NOEXEC状态?

时间:2019-05-07 15:47:55

标签: sql-server vb.net sql-server-2008-r2

我已经搜索了一段时间,找不到任何开头。如果这是重复的操作,我深表歉意,但也许我在谷歌搜索时的关键词并不是最好的。

我有一堆以IF开头的脚本,如果该IF为True,则NOEXEC标志设置为ON

类似这样的东西

if TRUE
BEGIN
    SET NOEXEC ON;  
END

问题是,当我将NOEXEC设置为ON后执行任何脚本时,它将无法运行。我已经进行了测试,并且如果我将SET NOEXEC OFF设置为OFF,则其余脚本可以正常运行。

server.ConnectionContext.ExecuteNonQuery(script)

我是否仍然需要检查NOEXEC的状态,还是应该将其附加到所有脚本的开头?

谢谢大家

编辑:脚本示例可以更好地解释问题

1º脚本

select * from List
print'Done printing'

2º脚本

SET NOEXEC ON;
select * from List
print'Won't print'

3º脚本

select * from List
print'Done printing'

我的预期结果将是在FileInfoMessage上显示两个“完成打印”消息,但是除非我执行SET NOEXEC OFF,否则我只会从第一条消息中获取打印内容

1 个答案:

答案 0 :(得分:3)

Conversion of type 'Timer' to type 'number' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.ts(2352)停止执行SQL命令,直到遇到set noexec on

有一条命令可获取noexec的当前状态,因为set noexec off处于打开状态,因此它不会执行。如果它确实执行了,那就意味着noexec已关闭。

可以说,设计团队可以提出另一个“特殊”命令,该命令绕过noexec状态并始终执行(就像noexec on一样),为您提供{{1 }}。据我所知,这样的命令不存在,因此尽管有一种query the current SET flags的方法,但noexec却没有。

您可以:

  • 为每个脚本使用一个新的连接对象
  • 在每个脚本的结尾处打开set noexec off
  • 执行一个虚拟noexec。如果您退回noexec off,则noexec关闭。