簡體   English   中英

通過存儲過程更新數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM