3

我正在使用 SQL Server 2008

我有一个名为varEnteredValuedatatype的列sql_Variant

当我执行以下选择语句时,我什么也没得到

SELECT * FROM tblname WHERE varEnteredValue = 1 

请注意,我在此列中有许多值为 1 的值

问题

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

4

1 回答 1

12

这里有两个问题:

  1. 您需要将值从 转换SQL_VARIANTINT
  2. 您需要注意转换值的方式,因为并非列中的每个值都必须转换为INT,而且很难预测 SQL Server 是先过滤还是先尝试转换。您需要先测试该值是否为数字,为此,您必须将其显式转换为字符串。

这是一个解决这两个问题的示例:

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

你为什么用SQL_VARIANT

于 2013-03-27T17:22:39.250 回答