首页 > 解决方案 > 有没有办法检查 NOEXEC 状态?

问题描述

我一直在寻找一段时间,找不到任何可以开始的东西。如果这是重复的,我深表歉意,但也许我在谷歌搜索时的关键字不是最好的。

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

像这样的东西

if TRUE
BEGIN
    SET NOEXEC ON;  
END

问题是当我在 NOEXEC 设置为 ON 后执行任何脚本时,它不会运行。我已经测试过了,如果我设置 NOEXEC 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,否则我只能从第一条消息中获得打印

标签: sql-servervb.netsql-server-2008-r2

解决方案


set noexec on停止执行 SQL 命令,直到set noexec off遇到 a。

如果有一个命令可以获取 noexec 的当前状态,它也不会执行,因为它会noexec打开。如果它确实执行了,那将意味着 noexec 已关闭。

可以说,设计团队可以提出另一个“特殊”命令,绕过noexec on状态并执行(就像这样set noexec off做一样),为您提供noexec. 据我所知,这样的命令不存在,所以虽然有一种查询当前SET标志的方法,但没有用于 noexec 的方法。

你可以:

  • 为每个脚本使用一个新的连接对象
  • noexec off在每个脚本的末尾打开它
  • 执行一个 dummy select 1。如果你1回来,noexec 就会关闭。

推荐阅读