कृपया निम्नलिखित SQL क्वेरी पर एक नज़र डालें:
CREATE TYPE dbo.IN_MEMORY_TABLE_TYPE AS TABLE
(
source_col INT NULL,
target_col INT not NULL
INDEX ix_InMemoryTable NONCLUSTERED (target_col)
)
WITH (MEMORY_OPTIMIZED = ON)
GO
DECLARE
@t dbo.IN_MEMORY_TABLE_TYPE
INSERT @t
(
source_col,
target_col
)
VALUES
(10, 0),
(0, 0)
UPDATE r1
SET
target_col = -1
FROM @t r1
WHERE EXISTS
(
SELECT *
FROM @t r2
WHERE r2.source_col > 0
)
SELECT *
FROM @t
GO
DROP TYPE dbo.IN_MEMORY_TABLE_TYPE
SQL सर्वर 2014 (12.0.4100.1 X64) पर इसे निष्पादित करते समय UPDATE
क्वेरी में अपेक्षित के रूप में कार्य करता है और निम्न मान्य रिटर्न वापस आ जाता है:
source_col | target_col ---------------------- 10 | -1 0 | -1
हालाँकि, SQL Server 2016 (13.0.4001.0 X64) पर निष्पादित करते समय सभी पंक्तियों को अद्यतन नहीं किया जाता है और निम्नलिखित को लौटा दिया जाता है:
source_col | target_col ---------------------- 10 | -1 0 | 0
यह मेरे लिए एक बग जैसा दिखता है, क्या यह आपको ऐसा लगता है?