有没有办法检查 NOEXEC 状态?
Is there a way to check NOEXEC state?
我已经搜索了一段时间,但找不到任何可以入手的内容。如果这是重复的,我深表歉意,但也许我在谷歌搜索时使用的关键字不是最好的。
我有一堆以 IF 开头的脚本,如果 IF 为真,则 NOEXEC 标志设置为 ON
像这样
if TRUE
BEGIN
SET NOEXEC ON;
END
问题是当我在 NOEXEC 设置为 ON 后执行任何脚本时它不会 运行。我已经测试过,如果我 SET 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 上有两条 'Done printing' 消息,但除非我执行 SET NOEXEC OFF,否则我只会从第一条消息中获取打印信息
set noexec on
停止执行 SQL 命令,直到遇到 set noexec off
。
如果有一个命令获取 noexec 的当前状态,它也不会执行,因为 noexec
会打开。如果它确实执行了,那就意味着 noexec 已关闭。
可以说,设计团队可以想出另一个 "special" 命令绕过 noexec on
状态并无论如何执行(就像 set noexec off
那样),为您提供当前状态noexec
个。据我所知,这样的命令不存在,所以虽然有 query the current SET
flags 的方法,但没有用于 noexec 的方法。
您可以:
- 为每个脚本使用一个新的连接对象
- 在每个脚本末尾打开
noexec off
- 执行虚拟
select 1
。如果你 1
回来了,noexec 就关闭了。
奇怪的是,你需要使用矛盾才能找出来。
当 NOEXEC 开启时,不执行 IF 语句的参数,而是始终计算为 TRUE。所以“IF 1=0”是一个足够好的矛盾来检测这一点。
-- Try one or the other of these statements
SET NOEXEC ON;
-- SET NOEXEC OFF;
IF 1=0
BEGIN
SET NOEXEC OFF
PRINT 'noexec was on'
SET NOEXEC ON
END
ELSE
BEGIN
PRINT 'noexec was off'
END
请注意,我们必须暂时关闭 NOEXEC,这样我们才能打印“noexec was on”消息。
我已经搜索了一段时间,但找不到任何可以入手的内容。如果这是重复的,我深表歉意,但也许我在谷歌搜索时使用的关键字不是最好的。
我有一堆以 IF 开头的脚本,如果 IF 为真,则 NOEXEC 标志设置为 ON
像这样
if TRUE
BEGIN
SET NOEXEC ON;
END
问题是当我在 NOEXEC 设置为 ON 后执行任何脚本时它不会 运行。我已经测试过,如果我 SET 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 上有两条 'Done printing' 消息,但除非我执行 SET NOEXEC OFF,否则我只会从第一条消息中获取打印信息
set noexec on
停止执行 SQL 命令,直到遇到 set noexec off
。
如果有一个命令获取 noexec 的当前状态,它也不会执行,因为 noexec
会打开。如果它确实执行了,那就意味着 noexec 已关闭。
可以说,设计团队可以想出另一个 "special" 命令绕过 noexec on
状态并无论如何执行(就像 set noexec off
那样),为您提供当前状态noexec
个。据我所知,这样的命令不存在,所以虽然有 query the current SET
flags 的方法,但没有用于 noexec 的方法。
您可以:
- 为每个脚本使用一个新的连接对象
- 在每个脚本末尾打开
noexec off
- 执行虚拟
select 1
。如果你1
回来了,noexec 就关闭了。
奇怪的是,你需要使用矛盾才能找出来。
当 NOEXEC 开启时,不执行 IF 语句的参数,而是始终计算为 TRUE。所以“IF 1=0”是一个足够好的矛盾来检测这一点。
-- Try one or the other of these statements
SET NOEXEC ON;
-- SET NOEXEC OFF;
IF 1=0
BEGIN
SET NOEXEC OFF
PRINT 'noexec was on'
SET NOEXEC ON
END
ELSE
BEGIN
PRINT 'noexec was off'
END
请注意,我们必须暂时关闭 NOEXEC,这样我们才能打印“noexec was on”消息。