SQL Server选择sql_variant等于不起作用的地方?

时间:2013-03-27 17:19:18

标签: sql sql-server sql-server-2008

我正在使用SQL Server 2008

我有一个名为varEnteredValue的数据类型为sql_Variant的列。

当我执行以下select语句时,我没有得到任何东西

SELECT * FROM tblname WHERE varEnteredValue = 1 

注意我在这个列中有很多值为1的值

问题

如何解决此问题?我需要转换数据类型吗?

1 个答案:

答案 0 :(得分:11)

这里有两个问题:

  1. 您需要将值从SQL_VARIANT转换为INT
  2. 您需要注意如何转换值,因为并非列中的每个值都必须可转换为INT,并且很难预测SQL Server是先过滤还是尝试首先转换。如果值是数字,则需要先测试,为了做到这一点,必须将其显式转换为字符串。
  3. 以下是一个解决这两个问题的示例:

    WHERE CASE WHEN ISNUMERIC(CONVERT(VARCHAR(32), varEnteredValue)) = 1 
      THEN CONVERT(FLOAT, varEnteredValue) ELSE 0 END = 1;
    

    您为什么使用SQL_VARIANT