[英]Updating data via stored procedure
我有兩個表(表1和表2),如下所示。 我想在獲取表1中的數據時更新表2中的列。
表格1
+-----------+---------------+---------------------+
+ form_id + request_id + BatchNo +
+-----------+---------------+---------------------+
+ 5649464 + 562 + Batch5649464_1 +
+-----------+---------------+---------------------+
+ 5649464 + 563 + Batch5649464_11 +
+-----------+---------------+---------------------+
表2
+------------+---------------+-----------+
+ NumberId + ServiceName + RefId +
+------------+---------------+-----------+
+ 5649464 + XYZ + 0 +
+------------+---------------+-----------+
+ 5649464 + XYZ + 0 +
+------------+---------------+-----------+
在表1中,按照上面的列表有兩行。 默認情況下,我的RefId為0.我必須使用表1中的數據(request_id)更新該列。 如您所見,request_id有兩個不同的數據。 數據(562和563)應根據我的預期輸出進行更新。 但是現在我按照初始輸出得到了結果。 根據我的預期輸出,任何人都可以幫忙嗎?
DECLARE @Tempnumbers TABLE
(
form_id INT ,
request_id INT
);
;
WITH Result
AS ( SELECT form_id ,
CONVERT(BIGINT, ( CONVERT(VARCHAR, request_id) )) AS request_id
FROM [Table1]
)
INSERT INTO @Tempnumbers
SELECT form_id, request_id
FROM Result;
UPDATE DT
SET RefID = request_id
FROM Table2 DT
INNER JOIN @Tempnumbers TN ON TN.NumberId = DT.form_id;
初始輸出
+------------+---------------+-----------+
+ NumberId + ServiceName + RefId +
+------------+---------------+-----------+
+ 5649464 + XYZ + 562 +
+------------+---------------+-----------+
+ 5649464 + XYZ + 562 +
+------------+---------------+-----------+
預期產出
+------------+---------------+-----------+
+ NumberId + ServiceName + RefId +
+------------+---------------+-----------+
+ 5649464 + XYZ + 562 +
+------------+---------------+-----------+
+ 5649464 + XYZ + 563 +
+------------+---------------+-----------+
您可以使用ROW_NUMBER()連接表並更新RefId
;WITH cte1 AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY form_id ORDER BY request_id) as rn
FROM Table1 t1
), cte2 AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY NumberId ORDER BY RefId) as rn
FROM Table2 t2
)
UPDATE c2
SET RefId = c1.request_id
FROM cte1 c1
INNER JOIN cte2 c2
ON c1.form_id = c2.NumberId AND c1.rn = c2.rn
如果您從Table2
選擇,您將獲得:
NumberId ServiceName RefId
5649464 XYZ 562
5649464 XYZ 563
Table2沒有主鍵,因此您不能使用一個值更新第一行,而使用不同值更新第二行,除非您將主鍵添加到table2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.