簡體   English   中英

根據存儲過程返回的列值顯示消息

[英]Display message based on column value returned from stored procedure

我想創建一個存儲過程,它根據表中的數據返回不同的消息。 這是我當前的存儲過程的樣子:

ALTER PROCEDURE [dbo].[sp_GETLIST_ACC]
    @per_id int
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @status varchar(10)
    
    SELECT @status = req_status 
    FROM TOL_FILE_REQUEST 
    WHERE per_id = @per_id

    IF @status = 'A'
    BEGIN
        SET @status = 'Approved'
    END
    ELSE IF @status = 'P'
    BEGIN
        SET @status = 'Pending'
    END

    SELECT 
        req_id,
        file_no,
        req_status,
    FROM 
        TOL_FILE_REQUEST
    WHERE 
        per_id = @per_id
END

桌子是這個

req_id | file_no  | req_status
-------+----------+-----------
  6    | AS000001 |    A
 10    | AS000002 |    P
 11    | AS000003 |    A
 12    | AS000004 |    A
 13    | AS000005 |    A

但是在執行存儲過程之后,我得到了以下內容:

req_id | file_no  | req_status
-------+----------+-----------
  6    | AS000001 | Approved    
 10    | AS000002 | Approved    
 11    | AS000003 | Approved
 12    | AS000004 | Approved
 13    | AS000005 | Approved    

但我需要的是:

req_id | file_no  | req_status
-------+----------+-----------
  6    | AS000001 | Approved    
 10    | AS000002 | Pending
 11    | AS000003 | Approved
 12    | AS000004 | Approved
 13    | AS000005 | Approved    

據我了解, req_status遵循最新插入的數據。 但為什么? 我能做些什么來克服這個問題? 我嘗試使用 cursor 進行迭代並使用計數器,但它執行了多次。

提前致謝!

只需使用CASE語句在一個語句中完成所有操作。

ALTER PROCEDURE [dbo].[sp_GETLIST_ACC]
    @per_id int

AS
BEGIN

    SET NOCOUNT ON;
    SELECT req_id,
           file_no,
           CASE req_status
               WHEN 'A' THEN 'Approved'
               WHEN 'P' THEN 'Pending'
               ELSE 'Unknown'
           END as req_status
    FROM TOL_FILE_REQUEST
    WHERE per_id = @per_id
END

暫無
暫無

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

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