http://sqlfiddle.com/#!3/9aaa3/1でクエリ用のストアド プロシージャを作成しようとしています 。パラメータは EmpId と EmpName です。クエリは正常に機能します。'@query' 部分内でパラメーターが遅延されている場合、'ストアド プロシージャの実行' でパラメーターの入力を求めるプロンプトが表示されません。「@query」の外側で宣言すると、パラメーターを送信するオプションが表示されますが、フィルターに関係なく常にすべての行が返されます。
だから.....これは正しい方法ですか:
CREATE PROCEDURE GetEmployeeLeaves
BEGIN
DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(LeaveName)
from tblLeaveType
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')
SET @query = '
DECLARE @EmpId uniqueidentifier = null,
@EmpName nvarchar(50) = null
IF @EmpId ='+'00000000-0000-0000-0000-000000000000'+'
SET @EmpId = NULL
IF @EmpName = '+''+'
SET @EmpName = NULL
SELECT EmpId, EmpName,' + @cols + '
FROM
(
SELECT E.EmpId, E.EmpName, T.LeaveName, L.Days
FROM tblEmp E
LEFT OUTER JOIN tblEmpLeaves L ON E.EmpId = L.EmpId
LEFT OUTER JOIN tblLeaveType T ON L.TypeId = T.TypeId
WHERE
(E.EmpId = @EmpId OR @EmpId IS NULL)AND
(E.EmpNameLIKE %@EmpName% OR @EmpName IS NULL)
) x
PIVOT
(
MAX(Days) FOR LeaveName IN (' + @cols + ')
) p
ORDER BY EmpId'
execute sp_executesql @query;
END