【问题标题】:Conversion failed when converting the varchar value '%'转换 varchar 值 '%' 时转换失败
【发布时间】:2016-03-21 03:39:24
【问题描述】:

我需要使用参数 ID(int) 到 Id(int) 列搜索 ffg 表,如果没有提供 ID,我想返回该表中的所有数据。我在下面尝试过这个查询:

SELECT *
FROM TableName
WHERE Id LIKE ISNULL (@id, '%')

但是这个查询返回错误:

将 varchar 值“%”转换为数据类型时转换失败 诠释。

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    您正在将整数与“%”进行比较,并且您还使用了 LIKE,这两者都是错误的。 你需要使用这个

    SELECT *
    FROM TableName
    WHERE (Id = @id) or (@id is null)
    

    【讨论】:

      【解决方案2】:

      这就是你在ISNULL里面要做的事情:

      SELECT *
      FROM TableName
      WHERE ID = ISNULL(@id, ID))
      

      这里,如果@id 为null,则传递ID(列值本身)进行比较,这将始终匹配并导致返回表中的所有数据。

      【讨论】:

        【解决方案3】:

        这是因为ISNULL 规则:

        replacement_value 必须是可隐式转换为 check_expresssion 类型的类型。

        在你的情况下:

        ISNULL(@id, '%')
        

        @idNULL 时,SQL Server 会尝试将'%' 转换为INT,从而导致转换错误。

        如果@idNULL,要返回所有行,您可以这样做:

        SELECT *
        FROM TableName
        WHERE 
            (Id = @id OR @id IS NULL)
        

        【讨论】:

          【解决方案4】:

          你需要对 Id 进行种姓,因为它是整数,所以喜欢:

          Where CAST(Id AS TEXT) LIKE '123%')
          

          【讨论】:

          • 感谢您的回答。我曾尝试这样做,但它返回此错误“不允许从数据类型 int 到文本的显式转换。”
          猜你喜欢
          • 2013-02-18
          • 1970-01-01
          • 2013-12-30
          • 2023-03-31
          • 2011-05-01
          • 1970-01-01
          相关资源
          最近更新 更多