1

動的に作成されたテーブルに作用する動的 SQL SP があります。

この SP が動的に生成する特定のクエリは、次のように与えられます。

SELECT * FROM [DYNAMIC_TABLE] WHERE [RATE] BETWEEN '0.0' AND '10.0'

[RATE]のタイプは であることに注意してくださいFloat

[RATE]ただし、列のタイプが である別の動的に作成されたテーブルでは、同じクエリが失敗しますInt。これは、パラメーターが一重引用符で囲まれているためであることを理解しています。

この動作の違いの理由は何ですか?

4

2 に答える 2

1

データ型を一致させるために、暗黙的な変換を強制しています。これはすべて型の優先順位に関するものです

float列の場合、データ型floatvarchar. floatが勝ち、and を s に変換しようとして'0.0'成功'10.0'floatます。

int列には、データ型とintがありvarcharます。andをsintに変換しようとして失敗します。'0.0''10.0'int

引用符がないと、int列のデータ型はintと になりdecimalます。decimalが勝ち、int列の値を変換しdecimalて成功させようとします。

于 2013-12-11T07:16:24.193 に答える
0

値「0.0」と「10.0」をintに変換/キャストしてみてください

[Rate] が Float の場合

SELECT * FROM [DYNAMIC_TABLE] WHERE [RATE] BETWEEN '0.0' AND '10.0'

[Rate] が Int の場合

SELECT * FROM [DYNAMIC_TABLE] WHERE [RATE] BETWEEN convert(int, '0.0') AND convert(int, '10.0')'

また

SELECT * FROM [DYNAMIC_TABLE] WHERE convert(float, [RATE]) BETWEEN '0.0' AND '10.0'
于 2013-12-11T07:19:20.973 に答える