DECLARE @ExeSQL nvarchar(1000)
SET @ExeSQL = 'SELECT ROW_NUMBER() OVER(Order By CD.OutDate DESC) AS SerialNumber,C.Name,SB.ID,M.Member_Name,CD.OutDate FROM  dbo.CertifiedDetail CD Inner Join dbo.Customers C On CD.CustomerID = C.ID Inner Join dbo.SaleBill SB On CD.SaleID = SB.ID Inner Join dbo.Member M On SB.MemberID = M.Member_ID WHERE CD.IsDelete = 0 And (CD.OutDate Between ''' + @StartDate + ''' And ''' + @EndDate +''')'
print @ExeSQL以上代码在运行存储过程时出现“从字符串向 datetime 转换时失败.”,@StartDate和@EndDate为存储过程参数

解决方案 »

  1.   

    你可以检查一下 
    @StartDate和@EndDate 
    传入的是否是有效的日期阿!
      

  2.   

    传入的参数@StartDate和@EndDate类型没有错误,是有效的日期
      

  3.   

    (CD.OutDate Between ''' + @StartDate + ''' And ''' + @EndDate +''')'
    改为
    (CD.OutDate Between  @StartDate  And @EndDate )
      

  4.   

    (CD.OutDate Between ''' + @StartDate + ''' And ''' + @EndDate +''')'
    改为
    (CD.OutDate Between  @StartDate  And @EndDate )这种方法不行的,会出现需要声名变量@StartDate 
     
    我的方法是 CAST(@StartDate as nvarchar(10) 把二个日期变量传换为字符串