2015-06-02 36 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