web-dev-qa-db-ja.com

SQL Serverは、式の結果のデータ型をチェックします

通常、データ型を一時テーブルに入れ、テーブルの列タイプを検査します。

select 1.0 N into tbl

sp_help tbl

列Nは、式1.0のデータ型を示します。 (これは簡単な例です)

式のデータ型を直接検査するSQL関数がありますが、名前は今私をエスケープします。

この関数の名前は何ですか?

42
RichardTheKiwi

SQL_VARIANT_PROPERTY は近い

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?

66
gbn

私が考えることができるのは [〜#〜] isnumeric [〜#〜][〜#〜] isdate [〜#〜] 関数だけです。

式を渡すと、これらは1/0を返します。残念ながら式が与えられた場合、型を返すものは考えられません。

UPDATE:

SQL_VARIANT_PROPERTY を試してください!これがあなたが探しているものだと思います。追跡するのが難しい...

5
Abe Miessler

私はそのような機能を見たことがない。

T-SQL式 に関するMSDN記事から:

単一の定数、変数、スカラー関数、または列名で構成される単純な式の場合:式のデータ型、照合、精度、スケール、および値は、データ型、照合、精度、スケール、および値参照される要素。

比較演算子または論理演算子を使用して2つの式を組み合わせると、結果のデータ型はブール値になり、値はTRUE、FALSE、またはUNKNOWNのいずれかになります。ブールデータ型の詳細については、「比較演算子(Transact-SQL)」を参照してください。

算術演算子、ビット演算子、または文字列演算子を使用して2つの式を組み合わせると、結果のデータ型が演算子によって決まります。

多くのシンボルと演算子で構成される複雑な式は、単一値の結果に評価されます。結果の式のデータ型、照合、精度、および値は、最終的な結果に達するまで、コンポーネント式を一度に2つずつ組み合わせて決定されます。式が結合される順序は、式内の演算子の優先順位によって定義されます。

2
Joe Stefanelli