2013-03-27 63 views
1

我使用SQL Server 2008SQL Server select sql_variant平等不起作用?

我有一个名为数据类型sql_VariantvarEnteredValue列。

当我执行以下select语句我没有得到任何

SELECT * FROM tblname WHERE varEnteredValue = 1 

通知我有一个价值1个多值此列

问题

哪有我解决了这个问题?我是否需要转换数据类型?

+1

确定吗?我不能复制:http://sqlfiddle.com/#!3/cb0da/1 - 我不会建议存储与该数据类型... – sgeddes 2013-03-27 17:23:30

回答

8

有两个问题在这里:

  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

+0

我得到以下错误:Msg 8116,Level 16,State 1,行1 参数数据类型sql_variant对于isnumeric函数的参数1无效。 – 2013-03-27 17:25:31

+2

@Mina对不起,我应该添加2a。请尝试显式转换。 – 2013-03-27 17:28:45

+0

现在得到此错误:Msg 245,Level 16,State 1,Line 1 将nvarchar值“3.3”转换为数据类型int时转换失败。 – 2013-03-27 17:29:08