2015-06-02 73 views
1

存儲過程有什麼錯在執行應用程序動態查詢「錯誤」

消息156,15級,狀態1,關鍵字 「和」近11號線有語法錯誤我的代碼得到錯誤。

這是我的代碼。任何幫助將不勝感激。

ALTER PROCEDURE [dbo].[Usp_ReportList] 
      @pAccountType varchar(35)=null, 
    @pFromDate datetime=null, 
    @pToDate datetime=null, 
    @pAccountId int=null, 
    @pUserId int=null, 
    @pTeamId int=null 

AS 
BEGIN 
SET NOCOUNT ON; 
Declare @strSQL AS NVarchar(4000) 
SET @strSQL =' 
SELECT 
     OrderInfoId, 
     BorrowerFirstName, 
     BorrowerLastName, 
     RequestedURL, 
     Requests, 
     CustomerUserID As LenderId , 
     o.RequestIPAddress As OriginatingIPAddress, 
     o.Requests As Status 
from orderInfo o ' 

if(@pAccountType = 'Lender') 
    BEGIN 
    SET @strSQL += 'inner join [User] u on o.CustomerUserId = u.UID where 1=1' 
END 
else if(@pAccountType = 'Affiliate') 
    BEGIN 
    SET @strSQL += 'inner join [User] u on o.AffiliateID = u.UID where 1=1' 
END 

if(@pFromDate != '') 
    BEGIN 
    SET @strSQL += ' and o.RequestDateTime >= ''' + CONVERT(VARCHAR(25),@pFromDate) + '''' 
END 

if(@pToDate != '') 
    BEGIN 
    SET @strSQL += ' and o.RequestDateTime <= ''' + CONVERT(VARCHAR(25),@pToDate) + '''' 
END 

if(@pAccountId != '') 
    BEGIN 
    SET @strSQL += ' and u.UID in (select UID from [User] where AccountID = ' + CONVERT(VARCHAR(10),@pAccountId) + ') ' 
END 

if(@pUserID !='') 
    BEGIN 
    SET @strSQL += ' and u.UserId = ' + CONVERT(VARCHAR(10),@pUserId) + ' ' 
END 

if(@pTeamId !='') 
    BEGIN 
    SET @strSQL += ' and u.TeamId = ' + CONVERT(VARCHAR(10),@pTeamId) + ' ' 
END 


SET @strSQL += ' 
GROUP BY 
    OrderInfoId, 
    BorrowerFirstName, 
    BorrowerLastName, 
    RequestedURL, 
    Requests, 
    CustomerUserID, 
    o.RequestIPAddress, 
    o.Requests' 

EXEC (@strSQL) 
--PRINT (@strSQL) 
END 




Exec Usp_ReportList 'Lender','2015-06-01 00:00:00','2015-06-02 00:00:00','2','1' 

這裏是我的剖析genereated查詢

exec sp_executesql N'Exec Usp_ReportList @pAccountType,@pFromDate,@pToDate,@pAccountId,@pUserId,@pTeamId',N'@pAccountType nvarchar(1),@pFromDate datetime,@pToDate datetime,@pAccountId int,@pUserId int,@pTeamId int',@pAccountType=N'1',@pFromDate='2015-06-01 00:00:00',@pToDate='2015-06-02 00:00:00',@pAccountId=1,@pUserId=2,@pTeamId=2 

得到錯誤

消息156,15級,狀態1,關鍵字 '和' 近11行的語法不正確。

能不能弄明白其中實際問題

使用PRINT(@strSQL)

SELECT 
     OrderInfoId, 
     BorrowerFirstName, 
     BorrowerLastName, 
     RequestedURL, 
     Requests, 
     CustomerUserID As LenderId , 
     o.RequestIPAddress As OriginatingIPAddress, 
     o.Requests As Status 
from orderInfo o and o.RequestDateTime >= 'Jun 1 2015 12:00AM' and o.RequestDateTime <= 'Jun 1 2015 12:00AM' and u.UID in (select UID from [User] where AccountID = 2) and u.UserId = 5 and u.TeamId = 5 
GROUP BY 
    OrderInfoId, 
    BorrowerFirstName, 
    BorrowerLastName, 
    RequestedURL, 
    Requests, 
    CustomerUserID, 
    o.RequestIPAddress, 
    o.Requests 

回答

2

我想你想你的參數追加到您的查詢,如生成的語句下面。同時日期和字符串,你需要把它們放在單引號內這樣的「2014年1月1日」

IF(@pFromDate != '') 
BEGIN 
    SET @strSQL += ' and o.RequestDateTime >= ''' + @pFromDate + '''' 
END 

注:我還不能肯定我所引用的正確,以確保您的日期是單引號內。在執行之前打印出你的SQL語句以確保它看起來正確。

+0

現在很難與這一個,現在引號是好的,但是當它在應用程序中執行時,我得到以下錯誤消息156,級別15,狀態1,行11 關鍵字'和'。你請幫忙這裏有什麼不對 – Teerth

+0

把你的'PRINT'語句**放在'EXEC'之前,併發布SQL語句,以便我可以查看它。 –

+0

我已更新我的問題請看看 – Teerth