Исходя из кода, я понимаю, как могут выглядеть таблицы с примерами данных:
--CTR_table:
idP standard custom name
----------- ---------- ---------- ----------
10 Standard1 NULL NULL
10 Standard2 NULL NULL
10 Standard3 NULL NULL
10 Standard4 NULL NULL
10 Standard5 NULL NULL
--AnotherTableData:
hotel_code hcode code ccode_provider cname_provider
----------- ----------- ---------- -------------- --------------
1 1 Standard1 ccode1 cname1
2 2 Standard2 ccode2 cname2
3 3 Standard3 ccode3 cname3
4 4 Standard4 ccode4 cname4
5 5 Standard5 ccode5 cname5
Примечание. Я ожидал, что hotel_code
принадлежит одной таблице, а hcode
-к другой таблице, так что эти столбцы служат точкой соединения для двух таблиц.Однако код показывает, что оба эти поля принадлежат одной и той же таблице.Два поля должны быть равны для строки в AnotherTableData
, которая будет использоваться в обновлении.
Следующий запрос обновит CTR_table
без использования курсоров:
DECLARE @idP int;
SET @idP = 10; --always has a valid value
UPDATE CTR_table
SET
CTR_table.custom = AnotherTableData.ccode_provider,
CTR_table.[name] = AnotherTableData.cname_provider
FROM CTR_table
INNER JOIN AnotherTableData
ON CTR_table.idP = @idp
AND CTR_table.standard = AnotherTableData.code
AND AnotherTableData.hotel_code = AnotherTableData.hcode
Послеобновлении, поля custom
и name
в CTR_table
будут заполнены:
SELECT * FROM CTR_table
idP standard custom name
----------- ---------- ---------- ----------
10 Standard1 ccode1 cname1
10 Standard2 ccode2 cname2
10 Standard3 ccode3 cname3
10 Standard4 ccode4 cname4
10 Standard5 ccode5 cname5