通常、データ型を一時テーブルに入れ、テーブルの列タイプを検査します。
select 1.0 N into tbl
sp_help tbl
列Nは、式1.0
のデータ型を示します。 (これは簡単な例です)
式のデータ型を直接検査するSQL関数がありますが、名前は今私をエスケープします。
この関数の名前は何ですか?
DECLARE @what sql_variant
DECLARE @foo decimal(19,3) = 1, @bar decimal(11,7) = 2
SELECT @what = @foo / @bar
SELECT
SQL_VARIANT_PROPERTY(@what, 'BaseType'),
SQL_VARIANT_PROPERTY(@what, 'Precision'),
SQL_VARIANT_PROPERTY(@what, 'Scale'),
SQL_VARIANT_PROPERTY(@what, 'MaxLength')
SELECT @what = @foo + @bar
SELECT
SQL_VARIANT_PROPERTY(@what, 'BaseType'),
SQL_VARIANT_PROPERTY(@what, 'Precision'),
SQL_VARIANT_PROPERTY(@what, 'Scale'),
SQL_VARIANT_PROPERTY(@what, 'MaxLength')
SELECT @what = @foo * @bar
SELECT
SQL_VARIANT_PROPERTY(@what, 'BaseType'),
SQL_VARIANT_PROPERTY(@what, 'Precision'),
SQL_VARIANT_PROPERTY(@what, 'Scale'),
SQL_VARIANT_PROPERTY(@what, 'MaxLength')
または、既に行ったことの拡張として一時テーブル/SELECT..INTO ..
編集: Remus 'answer?
私が考えることができるのは [〜#〜] isnumeric [〜#〜] と [〜#〜] isdate [〜#〜] 関数だけです。
式を渡すと、これらは1/0を返します。残念ながら式が与えられた場合、型を返すものは考えられません。
UPDATE:
SQL_VARIANT_PROPERTY を試してください!これがあなたが探しているものだと思います。追跡するのが難しい...
私はそのような機能を見たことがない。
T-SQL式 に関するMSDN記事から:
単一の定数、変数、スカラー関数、または列名で構成される単純な式の場合:式のデータ型、照合、精度、スケール、および値は、データ型、照合、精度、スケール、および値参照される要素。
比較演算子または論理演算子を使用して2つの式を組み合わせると、結果のデータ型はブール値になり、値はTRUE、FALSE、またはUNKNOWNのいずれかになります。ブールデータ型の詳細については、「比較演算子(Transact-SQL)」を参照してください。
算術演算子、ビット演算子、または文字列演算子を使用して2つの式を組み合わせると、結果のデータ型が演算子によって決まります。
多くのシンボルと演算子で構成される複雑な式は、単一値の結果に評価されます。結果の式のデータ型、照合、精度、および値は、最終的な結果に達するまで、コンポーネント式を一度に2つずつ組み合わせて決定されます。式が結合される順序は、式内の演算子の優先順位によって定義されます。