Допустим, у меня есть это:
Declare @passRefID as int
Declare @passTextA as varchar
Deckare @oassTextB as varchar
Declare @passPropertyA as int
Declare @passPropertyB as int
Set @oassTextA = 'Joe'
Set @passTextB = 'Smith'
Set @passPropertyA = 21
Set @passPropertyB = 23
TSQL A:
Set @passRefID = Select Ref_ID from TableA where ID = 10
Ref_ID
возвращает значение 50
Теперь я хочу использовать это значение в другом операторе select, который возвращает любое количество строк.
Похоже, это
TSQL B:
Select UserID from TableB where FK_RefID = @passRefID
Допустим, он возвращает:
UserID
34
56
87
Теперь я хочу создать обновление для TableC
на основе UserID
, которые возвращаются ранее.
My TableC макет записи выглядит так:
ID, UserID, PropertyDefinitionID, PropertyValue
265, 34, 21, Bob
266, 34, 23, Barker
271, 34, 55, bb@abc.com
628, 56, 21, Jane
629, 56, 23, Adams
635, 56, 55, ja@abc.com
901, 83, 21, Tom
905, 83, 23, Thumb
910, 83, 55, tt@abc.com
Я знаю, что могу использовать:
Update TableC Set PropertyValue = @oassTextA Where UserID = 34 and PropertyDefinitionID = @passPropertyA
Update TableC Set PropertyValue = @oassTextB Where UserID = 34 and PropertyDefinitionID = @passPropertyB
Update TableC Set PropertyValue = @oassTextA Where UserID = 56 and PropertyDefinitionID = @passPropertyA
Update TableC Set PropertyValue = @oassTextB Where UserID = 56 and PropertyDefinitionID = @passPropertyB
Update TableC Set PropertyValue = @oassTextA Where UserID = 83 and PropertyDefinitionID = @passPropertyA
Update TableC Set PropertyValue = @oassTextB Where UserID = 83 and PropertyDefinitionID = @passPropertyB
Но моя проблема в том, что в TSQL B эти возвращаемые строки могут отличаться. Может быть возвращено 1 строка или 100 строк, и TableC сконструирован немного иначе, чем норма.
Как создать динамический оператор UPDATE
на основе количества возвращаемых строк с использованием уникальных идентификаторов USERID и способа, которым TableC использует PropertyDefinitionID?
Спасибо за вашу помощь.