3

SQL Server 2008 を使用しています

varEnteredValuedatatypeという列がありますsql_Variant

次の選択ステートメントを実行すると、何も得られません

SELECT * FROM tblname WHERE varEnteredValue = 1 

この列には値が 1 の値が多数あることに注意してください

質問

この問題を解決するにはどうすればよいですか? データ型を変換する必要がありますか?

4

1 に答える 1

12

ここには 2 つの問題があります。

  1. SQL_VARIANT値を からに変換する必要がありますINT
  2. 値の変換方法には注意が必要です。列のすべての値が に変換できるとは限らず、INTSQL 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 に答える