[英]Creating Stored Procedure with CASE statement that determine the column
我已經存儲了包含CASE
語句的過程。 但是,我需要根據我的參數選擇該參數,該參數定義列而不是值。
那可能嗎?
這是我嘗試過的:
CREATE PROCEDURE HR.GetRequestByPriv
@colKey VARCHAR(50)
AS
DECLARE @empName VARCHAR(100)
SELECT
@empName = (HR.EmployeeRec.fname + ' ' + HR.EmployeeRec.lname)
FROM
HR.LeaveRec
INNER JOIN
HR.EmployeeRec ON HR.LeaveRec.EmployeeRecNo = HR.EmployeeRec.recno
WHERE
CASE
WHEN @colKey = 'isApprove' THEN HR.LeaveRec.isApprove
WHEN @colKey = 'isNote' THEN HR.LeaveRec.isNote
WHEN @colKey = 'isVerify' THEN HR.LeaveRec.isVerify
END = 0
RETURN @empName
希望能為您提供幫助。 謝謝。
您選擇必須為零的列的代碼部分看起來不錯。
但是存儲過程的返回值始終是整數。 所以這行不通:
create procedure dbo.YourSP
as
declare @var varchar(50)
select @var = 'Oops this won''t work'
return @var -- Since @var is not an integer, this won't work as expected
通常的方法是返回行集。 任何不分配變量的select
都將返回一個行集。 例如:
create procedure dbo.YourSP
as
select 'Returning a rowset'
另一個選項是輸出參數:
create procedure dbo.YourSP
@var varchar(50) output
as
select @var = 'Returning an output parameter'
我糊塗了。 您說您想要一個存儲過程,但是您要返回一些東西。 Andomar有一個解決方案,它是輸出參數。 我懷疑您確實想要一個功能。 在這種情況下,您可以創建一個單語句表值函數,該函數很像帶有參數的視圖:
CREATE FUNCTION HR.GetRequestByPriv (
@colKey VARCHAR(50)
)
RETURNS TABLE as
RETURN(SELECT (l.fname + ' ' + l.lname) as EmpName
FROM HR.LeaveRec l NNER JOIN
HR.EmployeeRec e
ON l.EmployeeRecNo = e.recno
WHERE (@colKey = 'isApprove' AND HR.LeaveRec.isApprove = 0) OR
(@colKey = 'isNote' AND HR.LeaveRec.isNote = 0) OR
(@colKey = 'isVerify' AND HR.LeaveRec.isVerify)
);
然后,可以在select
語句中將其稱為:
select *
from HR.GetRequestByPriv('isNote');
這種小程序的最簡單方法是使用IF
。 在3個IF
/ ELSE
塊中使用3個不同的SELECT語句,僅此而已。 像這樣:
IF @colKey = 'isApprove'
SELECT @empName = (HR.EmployeeRec.fname + ' ' + HR.EmployeeRec.lname)
FROM HR.LeaveRec INNER JOIN HR.EmployeeRec ON HR.LeaveRec.EmployeeRecNo = HR.EmployeeRec.recno
WHERE HR.LeaveRec.isApprove = 0
ELSE
BEGIN
IF @colKey = 'isNote'
SELECT @empName = (HR.EmployeeRec.fname + ' ' + HR.EmployeeRec.lname)
FROM HR.LeaveRec INNER JOIN HR.EmployeeRec ON HR.LeaveRec.EmployeeRecNo = HR.EmployeeRec.recno
WHERE HR.LeaveRec.isNote = 0
ELSE
...
END
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.