これは、あなたが
ALTER SPHR_Employee_Get(@P_PK INT,@P_ACTIVE TINYINT)
AS
BEGIN
SELECT EMP_PK, EMP_NAME
FROM EMPLOYEE
WHERE (EMP_PK = @P_PK OR @P_PK = -1);
AND (EMP_ACTIVE = @P_ACTIVE OR @P_ACTIVE = -1)
END
今すぐ異なるparamは
-- All Employees
EXEC SPHR_Employee_Get -1, -1
-- All Active Employees
EXEC SPHR_Employee_Get -1, 1
-- All Inactive Employees
EXEC SPHR_Employee_Get -1, 0
-- Only a particular employee (EMP_PK = @P_PK)
EXEC SPHR_Employee_Get 123, -1
/*
All Active Employees
+ a Particular employee who's EMP_PK = @P_PK (even if that @P_PK employee is inactive)
- But no duplicate records.
*/
EXEC SPHR_Employee_Get -1, 1
EXEC SPHR_Employee_Get 123, -1
値を編集し送信することによって、それを実行したいものである:第五シナリオのコメントから
ALTER SPHR_Employee_Get(@P_PK INT, @P_ACTIVE TINYINT)
AS
BEGIN
IF (@P_ACTIVE <> -2)
BEGIN
SELECT EMP_PK, EMP_NAME
FROM EMPLOYEE
WHERE (EMP_PK = @P_PK OR @P_PK = -1);
AND (EMP_ACTIVE = @P_ACTIVE OR @P_ACTIVE = -1)
END
IF (@P_ACTIVE = -2)
BEGIN
SELECT EMP_PK, EMP_NAME
FROM EMPLOYEE
WHERE EMP_ACTIVE = 1
UNION
SELECT EMP_PK, EMP_NAME
FROM EMPLOYEE
WHERE EMP_PK = @P_PK
END
END
を
コールは
EXEC SPHR_Employee_Get 123, -2
編集2次のようになります。 TINYINTデータ型を通報します
CREATE PROCEDURE SPHR_Employee_Get(@P_PK INT, @P_ACTIVE TINYINT)
AS
BEGIN
/*
@P_ACTIVE VALUES in Different executions
--1 All Employees
--2 All Active Employees
--3 All Inactive Employees
--4 Only a particular employee (EMP_PK = @P_PK)
--5 All Active Employees
+ a Particular employee who's EMP_PK = @P_PK (even if that @P_PK employee is inactive)
- But no duplicate records.
*/
SELECT EMP_NBR, FIRST_NME
FROM EMPLOYEEPROFILE
WHERE ((@P_ACTIVE = 1)
OR (@P_ACTIVE=2 AND ACTIVE_IND=1)
OR (@P_ACTIVE=3 AND ACTIVE_IND=0)
OR (@P_ACTIVE=4 AND [email protected]_PK)
OR (@P_ACTIVE=5 AND ACTIVE_IND=1)
)
UNION
SELECT EMP_NBR, FIRST_NME
FROM EMPLOYEEPROFILE
WHERE @P_ACTIVE=5 AND [email protected]_PK
END
と実行が@Shakeerからいくつかの研究と提案した後
--1 All Employees
EXEC SPHR_Employee_Get NULL,1
--2 All Active Employees
EXEC SPHR_Employee_Get NULL,2
--3 All Inactive Employees
EXEC SPHR_Employee_Get NULL,3
--4 Only a particular employee (EMP_PK = @P_PK)
EXEC SPHR_Employee_Get 123,4
--5 All Active Employees + Passed Emp(Active/Inactive)
EXEC SPHR_Employee_Get 123,5
良いですが、ここでは5番目のシナリオでは、ストアドプロシージャを2回呼び出す必要があります。 –
はい、1回の呼び出しでそれをしたい場合は、別の方法で体を変更する必要があります。それは複雑な動的コーディングが必要です@AbdulRasheed –
貴重な提案をありがとう、私から+1。これまでのところ、この答えは最高です。私は、動的SQLを使用せずにこのシナリオをすべて処理するための簡単なスクリプトを待っています。 –