簡體   English   中英

SQL Server-使用存儲過程更新多個記錄

[英]SQL Server - update multiple records using a stored procedure

作為一個超級新手,請提供一些指導。

我需要比較兩組數據並用一個值更新一組數據。 到目前為止,這就是我所擁有的。

PROCEDURE [dbo].[update_personnel_rank]
AS
    DECLARE @frsid VARCHAR
    DECLARE @officerid VARCHAR
    DECLARE @hrrank VARCHAR
    DECLARE @personnelrank VARCHAR
    DECLARE @farank VARCHAR

    DECLARE @rank VARCHAR(150)

    SET @rank = 'Admin Spec II'
BEGIN
    SET NOCOUNT ON;

    SELECT
        @frsid = hr.FRSID, 
        @officerid =  p.OfficerID,
        @hrrank =  hr.Rank,
        @personnelrank = p.Rank, 
        @farank =  r.FA_Rank
    FROM 
        [FireApp_REPL_DW_Data].[dbo].[MCFRSCombinedPersonnelandPimsStaff] hr 
    INNER JOIN
        [fh_reports].[dbo].[personnel_bk] p ON p.OfficerID = hr.FRSID
    INNER JOIN
        [fh_reports].[dbo].[Rank_Lookup_tbl] r ON r.FA_Rank = hr.Rank
    WHERE
        (p.rank <> hr.Rank OR p.rank = '')
        AND p.Rank = @rank

    UPDATE [fh_reports].[dbo].[personnel_bk]
    SET Rank = @farank
    WHERE OfficerID =  @officerid
END
GO

select查詢返回3條記錄,並且該存儲過程運行無任何錯誤,但不會更新記錄。 由於select查詢返回3條記錄,我想我需要相應地更改參數設置,但不確定如何...

就@Sami而言,如果您不返回這些變量,則無需設置它們,而只需運行更新即可:

USE [YourDatabase]
GO

SET NOCOUNT ON
GO

ALTER PROCEDURE [dbo].[update_personnel_rank]
    @rank VARCHAR(150) --= 'Admin Spec II'
AS 

BEGIN

    IF @rank IS NULL OR @rank = ''
        RAISERROR('Please enter a valid rank string.', 16, 1)

    UPDATE hr
        SET [Rank] = r.FA_Rank
    FROM    [FireApp_REPL_DW_Data].[dbo].[MCFRSCombinedPersonnelandPimsStaff]   [hr]
        INNER JOIN [fh_reports].[dbo].[personnel_bk]                            [p]
            ON [p].[OfficerID] = [hr].[FRSID]
        INNER JOIN [fh_reports].[dbo].[Rank_Lookup_tbl]                         [r]
            ON [r].[FA_Rank] = [hr].[Rank]
    WHERE [p].[rank] <> [hr].[Rank]
        AND ([p].[Rank] = @rank OR p.[Rank] = '')

END ;
GO

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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