Click here to Skip to main content
15,904,155 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hi, i have the following SQL stored procedure. Every time i execute it, it will return me error message. Below are my codes:

SQL
DECLARE @SQL NVARCHAR(MAX)
DECLARE @params NVARCHAR(MAX)

SELECT @SQL = 'SELECT CustomerName,[0] as Pending, [1] as Save_As_Draft, [2] as Spec_Confirmed, [3] as Request_Revision, [4] as Withdraw, [5] as Pending_RND, [6] as Pending_QC, [7] as Manday_Confirmed, [0]+[1]+[2]+[3]+[4]+[5]+[6]+[7] as Total
FROM
(
    SELECT P.DocStatus,C.CustomerName,P.CustomerID, YEAR(P.CreateDate) as createYear
    FROM dbo.CRF_Project P
    INNER JOIN dbo.CustomerList C
    ON P.CustomerID = C.CustomerID
) p

PIVOT
(
    COUNT (createYear) FOR DocStatus IN ([0], [1], [2], [3], [4], [5], [6], [7])

) AS pvt '

SELECT @params = '@CUSTNAME VARCHAR(MAX),
                  @YEAR VARCHAR(MAX)'

IF(@CUSTNAME != '')
    SELECT @SQL = @SQL + ' WHERE CustomerName IN (' + @CUSTNAME + ')'
ELSE
    SELECT @SQL = @SQL
IF(@YEAR != '')
    SELECT @SQL = @SQL + ' WHERE createYear = ' +@YEAR+ '' --<-error here
ELSE
    SELECT @SQL = @SQL

EXEC sp_executesql @SQL, @params, @CUSTNAME, @YEAR
END



FIY, my input for @CUSTNAME is 'Osm' and @YEAR is '2014'
but if i leave it blank for both or input only for @CUSTNAME, it works fine, just when i input the @YEAR it will prompt me error
Posted

1 solution

SQL
DECLARE @SQL1 NVARCHAR(MAX)
DECLARE @SQL2 NVARCHAR(MAX)
DECLARE @params NVARCHAR(MAX)
SELECT @SQL1 ='SELECT P.DocStatus,C.CustomerName,P.CustomerID, YEAR(P.CreateDate) as createYear
    FROM dbo.CRF_Project P
    INNER JOIN dbo.CustomerList C
    ON P.CustomerID = C.CustomerID'
IF(@CUSTNAME != '')
    SELECT @SQL1 = @SQL1 + ' WHERE C.CustomerName IN (' + @CUSTNAME + ')'
ELSE
    SELECT @SQL1= @SQL1
IF(@YEAR != '')
    SELECT @SQL1 = @SQL1 + ' WHERE YEAR(P.CreateDate) = ' +@YEAR+ ''
ELSE
    SELECT @SQL1 = @SQL1


SELECT @SQL2 = 'SELECT CustomerName,[0] as Pending, [1] as Save_As_Draft, [2] as Spec_Confirmed, [3] as Request_Revision, [4] as Withdraw, [5] as Pending_RND, [6] as Pending_QC, [7] as Manday_Confirmed, [0]+[1]+[2]+[3]+[4]+[5]+[6]+[7] as Total
FROM(' + @SQL1 +
' ) p
 
PIVOT
(
    COUNT (createYear) FOR DocStatus IN ([0], [1], [2], [3], [4], [5], [6], [7])
 
) AS pvt '
 
SELECT @params = '@CUSTNAME VARCHAR(MAX),
                  @YEAR VARCHAR(MAX)'
 

 
EXEC sp_executesql @SQL2, @params, @CUSTNAME, @YEAR
END
 
Share this answer
 
Comments
Jamie888 18-Jun-14 23:08pm    
thanks for your solution, it works great!

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900