这是我的存储过程,在status='2'中,我得到了一个转换错误,我试图在这里找到上周的数据,包括今天的数据。如果有人能帮我,我将不胜感激。
下面是我得到的错误截图:
面向错误
代码:
ALTER PROCEDURE [dbo].[USP_GetRequest_DataListForViewPrint]
@RequestNo VARCHAR(50),
@FromDate varchar(50),
@ToDate varchar(50),
@Status varchar(20)
AS
BEGIN
DECLARE @SQLStr varchar(8000)
DECLARE @CurrentDate Varchar(100) =GETDATE()
IF (@RequestNo IS NOT NULL)
BEGIN
BEGIN
SET @SQLStr = 'SELECT Id,RequestStatus, RequestNo,RequestDate From CYGNUX_Request_Header WHERE RequestNo='+''''+@RequestNo+'''';
END
END
ELSE
IF @Status = '1'
BEGIN
SET @SQLStr = 'select Id,RequestStatus,RequestDate,RequestNo from CYGNUX_Request_Header where RequestDate between '+CHAR(39)+ convert(varchar(50) , @FromDate) +CHAR(39)+ ' AND '+CHAR(39)+ convert(varchar(50), @ToDate) +CHAR(39);
END
IF @Status ='2'
BEGIN
SET @SQLStr = 'select Id,RequestStatus, RequestNo, RequestDate from CYGNUX_Request_Header where RequestDate>='+(DATEADD(day,-11117,GETDATE()));
END
IF @Status ='3'
BEGIN
SET @SQLStr = 'select Id,RequestStatus,RequestNo, RequestDate As Today from CYGNUX_Request_Header Where RequestDate='+CHAR(39)+ convert(varchar(50) , @CurrentDate) +CHAR(39) ;
END
IF @Status ='4'
BEGIN
SET @SQLStr = 'select Id,RequestStatus, RequestNo,RequestDate from CYGNUX_Request_Header WHERE RequestDate<=' +CHAR(39)+ convert(varchar(50) , @CurrentDate) +CHAR(39);
END
PRINT @SQLStr;
EXEC(@SQLStr);
END
2条答案
按热度按时间mnowg1ta1#
下面您可以找到正确的t-sql
jucafojl2#
在
if @status = 2
条件,表达式(DATEADD(day,-11117,GETDATE()))
返回类型为的值datetime
. 您正在尝试使用+
接线员。你不能这么做:这将修复您的特定错误,但您的代码在其他方面也有很大的改进空间。如果你有一个有更多sql经验的同事,看看他们能否给你一些建议。