gpt4 book ai didi

sql-server - "NOEXEC ON"中的有趣行为

转载 作者:行者123 更新时间:2023-12-02 08:50:24 24 4
gpt4 key购买 nike

当我使用 NOEXEC ON 编写一些 T-SQL 查询时,我体验到了 SQL Server 的有趣行为,并且我很好奇为什么会发生这种情况。有时我只得到

Command(s) successfully.

消息如我所料,但有时我收到一条或多条

(0 row(s) affected)

消息。

我知道SET NOEXEC ON命令编译查询但不执行它,所以我认为我不应该得到任何

(0 row(s) affected)

消息。

在第一个示例中,一切看起来都很正常。

SET NOEXEC ON
INSERT INTO Test (column1) VALUES ('etc')

结果:

Command(s) successfully.

但是在第二个例子中,我认为出了问题......

SET NOEXEC ON
DELETE FROM Test

结果:

(0 row(s) affected)

在第三个示例中,我使用了临时表:

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 row(s) affected)

最后我只在查询中添加了 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 row(s) affected)

(0 row(s) affected)

最佳答案

尽管这可能不是您问题的答案:

但是当你删除

SET NOEXEC ON 
DELETE FROM Test

如果您向 DELETE 语句添加一个 where 条件,例如 DELETE FROM Test WHERE COLUMN1='etc'

您将得到期望的结果...此行为可能是由于我们执行的 DDL 和 DML 语句所致。

我还分析了第三种情况,如果您在临时表中插入,它会给出(0 行受影响),但如果在某些数据库或永久表上完成相同的插入,则会给出(命令已成功完成)。 )

这里可能是因为临时表和永久表的原因。

对于第四个,您添加了 GO :

GO会执行相关的sql命令n次。

因此,如果您单独执行插入语句和删除语句都有一些返回值,并且 GO 会将它们添加到批处理计划中。

关于sql-server - "NOEXEC ON"中的有趣行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10536756/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com