【问题标题】:Conversion failed when converting the nvarchar value '2016-03-01' to data type int将 nvarchar 值“2016-03-01”转换为数据类型 int 时转换失败
【发布时间】:2016-03-31 02:39:14
【问题描述】:
alter procedure sp1GetPricesByIteIdUserDateOccupancyNoOfPersons
    --@IteId nvarchar(50),
    @Occupancy nvarchar(50),
    @UserDate varchar(50)
    --@NoOfPersons nvarchar(50)
AS
BEGIN
    --SET NOCOUNT ON;
    DECLARE @DynamicSQL nvarchar(4000)

    SET @DynamicSQL = 'SELECT ['+@Occupancy+'] FROM Tbl_ItineraryDetails where '+@UserDate+' between [From Date] and [To Date]'

    EXECUTE sp_executesql @DynamicSQL
END

我得到了错误

将 nvarchar 值 '2016-03-01' 转换为数据类型 int 时转换失败

怎么了?

【问题讨论】:

  • 你得到什么错误?
  • 将 nvarchar 值 '2016-03-01' 转换为数据类型 int 时转换失败。

标签: sql sql-server


【解决方案1】:

很可能,问题在于字符串@UserDate 中的日期格式。您将值直接放在查询字符串中,并且没有引号。因此,除非是列名或包含单引号分隔符,否则查询很可能会产生错误。

你正在使用sp_executesql,所以使用参数。这是使用它的主要原因之一:

alter procedure sp1GetPricesByIteIdUserDateOccupancyNoOfPersons (
    --@IteId nvarchar(50),
    @Occupancy nvarchar(50),
    @UserDate varchar(50)
    --@NoOfPersons nvarchar(50)
AS
BEGIN
    --SET NOCOUNT ON;
    DECLARE @DynamicSQL nvarchar(4000)

    SET @DynamicSQL = 'SELECT ['+@Occupancy+'] FROM Tbl_ItineraryDetails where @UserDate between [From Date] and [To Date]';

    EXECUTE sp_executesql @DynamicSQL, N'@UserDate nvarchar(50)', @UserDate = @UserDate;
END;

编辑:

鉴于错误,您可能希望传入一个日期:

    EXECUTE sp_executesql @DynamicSQL, N'@UserDate DATE', @UserDate = @UserDate;

【讨论】:

    猜你喜欢
    • 2020-04-17
    • 2011-08-29
    • 2015-06-20
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多