2014-10-02 4 views
0

다음과 같이 저장 프로 시저가 있습니다. 동적 피벗에 매개 변수를 전달해야합니다. 내 쿼리 실행, 나는 그냥 전달 된 매개 변수동적 쿼리에 매개 변수 전달

-- AND (@SelectedSystemIDs IS NULL OR System.ID IN(select * from dbo.SplitInts_RBAR_1(@SelectedSystemIDs, ','))) 
    --AND ((@PlatformID IS NULL) OR (System.PlatformID = @PlatformID) OR (@PlatformID = 12 AND System.PlatformID <= 2)) 
    -- AND (ServiceEntry.ServiceDateTime between @StartDate and @EndDate) 

그래서 위의 기준을 추가 할에 따라 몇 가지 필터링을 할 필요가, 어떻게 달성 할 수?

ALTER PROCEDURE [dbo].[spExportStuff]        
(@StartDate datetime,        
@EndDate datetime,         
@SelectedSystemIDs nvarchar (2000) = NULL,  
@SelectedTsbIDs nvarchar (2000) = NULL, 
@UserRoleID int 
)        
AS        

DECLARE @InstrumentType int = NULL  
DECLARE @PlatformID int = null  

IF (@SelectedSystemIDs = '')       
    begin   
     SET @SelectedSystemIDs = NULL   
    END   

IF (@SelectedTsbIDs = '')       
    begin   
     SET @SelectedTsbIDs = NULL   
END   

IF(@UserRoleID = 1)  
BEGIN  
    SET @PlatformID = 1  
    END 

IF(@UserRoleID = 2) 
BEGIN 
SET @PlatformID = 2 
END 

IF (@UserRoleID = 3)  
BEGIN  
SET @PlatformID = 12  
END 

IF(@UserRoleID = 4) 
BEGIN 
SET @PlatformID = 3 
END 

IF(@UserRoleID = 5) 
BEGIN 
SET @PlatformID = 4 
END 

IF(@UserRoleID = 6) 
BEGIN 
SET @PlatformID = NULL 
END 


DECLARE @PivotColumnHeaders NVARCHAR(MAX) 

SELECT @PivotColumnHeaders = 
    COALESCE(
    @PivotColumnHeaders + ',[' + cast(SystemFullName as Nvarchar) + ']', 
    '[' + cast(SystemFullName as varchar)+ ']' 
    ) 
FROM System 
DECLARE @PivotTableSQL NVARCHAR(MAX) 
SET @PivotTableSQL = N' 
    SELECT * 
    FROM (
    SELECT 
     TSBNumber [TSBNumber], 
     SystemFullName, 
     ClosedDate 
    FROM ServiceEntry 
    INNER JOIN System 
     ON ServiceEntry.SystemID = System.ID 
    Group By TSBNumber, SystemFullName, ClosedDate 
    ) AS PivotData 
    PIVOT (
    max(ClosedDate) 
    FOR SystemFullName IN (
     ' + @PivotColumnHeaders + ' 
    ) 
    ) AS PivotTable 
' 
EXECUTE(@PivotTableSQL) 

답변

0

저장 프로 시저에 다른 입력으로 요구되는 기준을 구성하고

ALTER PROCEDURE [dbo].[spExportStuff]        
(@StartDate datetime,        
@EndDate datetime,         
@SelectedSystemIDs nvarchar (2000) = NULL,  
@SelectedTsbIDs nvarchar (2000) = NULL, 
@UserRoleID int, 
@WhereClause varchar(max) -> this is the new parameter. 
)  


DECLARE @PivotTableSQL NVARCHAR(MAX) 
SET @PivotTableSQL = N' 
    SELECT * 
    FROM (
    SELECT 
     TSBNumber [TSBNumber], 
     SystemFullName, 
     ClosedDate 
    FROM ServiceEntry 
    INNER JOIN System 
     ON ServiceEntry.SystemID = System.ID 
    Group By TSBNumber, SystemFullName, ClosedDate 
    ) AS PivotData 
    PIVOT (
    max(ClosedDate) 
    FOR SystemFullName IN (
     ' + @PivotColumnHeaders + ' 
    ) 
    ) AS PivotTable 
' + @WhereClause -> you can append the where clause here. 

EXECUTE(@PivotTableSQL) 
+0

내가 실행 문 근처에서 다시 선언 할 필요 없다 동적 쿼리에 추가 할 수 있습니다? – user721

+0

@ user721, 입력 매개 변수이므로 선언 할 필요가 없습니다. – radar