Trong khi tôi đang viết một số truy vấn T-SQL với NOEXEC ON
, tôi có kinh nghiệm hành vi thú vị của SQL Server và tôi tò mò về lý do tại sao nó xảy ra. Đôi khi tôi chỉ nhận đượchành vi Thú vị trong "noexec ON"
Lệnh thành công.
nhắn như tôi mong đợi, nhưng đôi khi tôi nhận được một hoặc nhiều
(0 row (s) bị ảnh hưởng)
tin nhắn.
Tôi biết rằng SET NOEXEC ON
lệnh biên dịch truy vấn nhưng không thực hiện nó, vì vậy tôi nghĩ tôi không nên nhận (hàng 0 (s) bị ảnh hưởng) bất kỳ
tin nhắn.
Trong ví dụ đầu tiên, mọi thứ có vẻ bình thường.
SET NOEXEC ON
INSERT INTO Test (column1) VALUES ('etc')
Kết quả:
Command (s) thành công.
Nhưng trong ví dụ thứ hai, tôi nghĩ có gì đó không ổn ...
SET NOEXEC ON
DELETE FROM Test
Kết quả:
(0 row (s) bị ảnh hưởng)
Trong ví dụ thứ ba tôi đã sử dụng bảng temp:
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
Kết quả:
(0 row (s) bị ảnh hưởng)
Và cuối cùng tôi chỉ GO
thêm vào truy vấn của tôi, tôi nghĩ rằng kết quả là thú vị
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
Kết quả:
(0 hàng (s) bị ảnh hưởng)
(0 hàng bị ảnh hưởng)
Hm Tôi không thể repro bất kỳ trường hợp mà tôi nhận được "(0 hàng (s) bị ảnh hưởng)". Không phải trong Denali cũng không phải trong SQL Server 2008. Bạn chỉ cần thực hiện các văn bản SQL bằng cách sử dụng SSMS mà không có bất kỳ tùy chọn đặc biệt hoặc hành động? – usr
Có, tôi đã thực hiện các văn bản SQL này bằng SSMS trên SQL Server 2008 R2 và tôi không sử dụng bất kỳ tùy chọn đặc biệt nào. – ogun