当我用 编写一些 T-SQL 查询时NOEXEC ON
,我经历了 SQL Server 的有趣行为,我很好奇它为什么会发生。有时我只得到
命令成功。
消息如我所料,但有时我收到一个或多个
(0 行受影响)
消息。
我知道该SET NOEXEC ON
命令编译查询但不执行它,所以我认为我不应该得到任何
(0 行受影响)
消息。
在第一个示例中,一切看起来都很正常。
SET NOEXEC ON
INSERT INTO Test (column1) VALUES ('etc')
结果:
命令成功。
但在第二个例子中,我认为出了点问题......
SET NOEXEC ON
DELETE FROM Test
结果:
(0 行受影响)
在第三个示例中,我使用了临时表:
CREATE TABLE #tmp (id INT IDENTITY(1, 1), idX INT)
SET NOEXEC ON
INSERT INTO #tmp (idX) VALUES (1)
DELETE FROM Test
SET NOEXEC OFF
DROP TABLE #tmp
结果:
(0 行受影响)
最后我只添加GO
到我的查询中,我认为结果很有趣
CREATE TABLE #tmp (id INT IDENTITY(1, 1), idX INT)
SET NOEXEC ON
GO
INSERT INTO #tmp (idX) VALUES (1)
DELETE FROM Test
SET NOEXEC OFF
DROP TABLE #tmp
结果:
(0 行受影响)
(0 行受影响)