У меня есть следующий sql
DECLARE @tmpSelectedData TABLE -- table variable
(SlNo INT IDENTITY(1,1) PRIMARY KEY
,dataID INT NULL
,ValID INT NULL
,DdrID INT NULL
,InrID INT NULL
,IprID INT NULL)
-- inserting into table variable
INSERT INTO @tmpSelectedData(dataID)
SELECT
SQ.dataID
FROM
@SelectedQuestions SQ
-- Update the table variable with some values
tblData
dataID,ValID,DdrID,InrID,IprID
1- 2- 3 - 4- 5
2- 7- 4 - 5- 8
3- 8- 2 - 4- 3
4- 0- 1 - 2- 5
@SelectedData
dataID
2
3
4
@tmpSelectedData
dataID,ValID,DdrID,InrID,IprID
2-
3-
4-
UPDATE @tmpSelectedData
SET IprID = D.dataID,
DdrID = D.DdrID,
InrID = D.InrID
FROM tblData D
INNER JOIN @SelectedData SD ON SD.dataID = D.dataID
При использовании этого запроса все строки @tmpSelectedData
будут обновлены на значение, соответствующее первой строке tblData
Ожидаемый результат в @tmpSelectedData
:
dataID,ValID,DdrID,InrID,IprID
2- 7- 4 - 5- 8
3- 8- 2 - 4- 3
4- 0- 1 - 2- 5
Фактический результат в @tmpSelectedData
:
dataID,ValID,DdrID,InrID,IprID
2- 7- 4 - 5- 8
3- 7- 4 - 5- 8
4- 7- 4 - 5- 8
будет обновляться только с первым значением
UPDATE @tmpSelectedData
SET dataID = D.dataID,
DdrID = D.DdrID,
InrID = D.InrID
FROM tblData D
INNER JOIN @tmpSelectedData SD ON SD.IprID = D.IprID
Когда я изменил его на @tmpSelectedData
с @SelectedData
(второй запрос), он будет работать и обновляться как ожидаемый результат.
В чем разница между двумя запросами?