首页 > 解决方案 > 根据存储过程返回的列值显示消息

问题描述

我想创建一个存储过程,它根据表中的数据返回不同的消息。这是我当前的存储过程的样子:

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以下是最新插入的数据。但为什么?我能做些什么来克服这个问题?我尝试使用游标进行迭代并使用计数器,但它执行了多次。

提前致谢!

标签: sqlsql-serverstored-proceduresssms-18

解决方案


只需在一个声明中完成所有操作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

推荐阅读