0

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
4

1 に答える 1

0

これらのリンクは、これを解決するのに役立ちました

http://www.codeproject.com/Articles/20815/Building-Dynamic-SQL-In-a-Stored-Procedure

ストアド プロシージャの t-sql 動的ステートメントで LIKE を使用する方法は?

于 2013-11-12T15:33:57.460 に答える