SQL Server选择sql_variant等于哪里不起作用?

Min*_*iel 1 sql sql-server sql-server-2008

我正在使用SQL Server 2008

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

当我执行以下select语句时,我什么都没得到

SELECT * FROM tblname WHERE varEnteredValue = 1 
Run Code Online (Sandbox Code Playgroud)

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

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

Aar*_*and 11

这里有两个问题:

  1. 您需要将值转换SQL_VARIANTINT.
  2. 您需要注意如何转换值,因为并非列中的每个值都必须可转换为a INT,并且很难预测SQL Server是先过滤还是首先尝试转换.如果值是数字,则需要先测试,为了做到这一点,必须将其显式转换为字符串.

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

WHERE CASE WHEN ISNUMERIC(CONVERT(VARCHAR(32), varEnteredValue)) = 1 
  THEN CONVERT(FLOAT, varEnteredValue) ELSE 0 END = 1;
Run Code Online (Sandbox Code Playgroud)

你为什么用SQL_VARIANT

  • @Mina是的,对不起,我应该加一个2a.请尝试使用显式转换. (2认同)
  • @Mina请不要在评论中发布代码.如果您需要*特定*案例的帮助,请输入问题中的表格结构和示例数据.另请告诉我们1000022这个值是如何进入表格的. (2认同)