SQL Server: 変数やスカラー値関数の戻り値など、値のデータ型を確認する方法

変数やスカラー値関数の戻り値などのデータ型を確認する方法

あんまりないかもしれませんが、ビルトイン関数のスカラー関数を使った後、暗黙の型変換が行われたりして、変数や戻り値のデータ型を確認したいような時はないでしょうか?

今回はそんな時に便利な関数をご紹介します!


SQL_VARIANT_PROPERTY 関数

SQL_VARIANT_PROPERTY 関数は、第一引数の値について、第二引数で指定したプロパティを返します。

構文は次の通りです。

SQL_VARIANT_PROPERTY ( [], [プロパティ] )  

[プロパティ] には次のようなものが指定可能です。

  • BaseType
  • Precision
  • Scale
  • TotalBytes
  • Collation
  • MaxLength

例えば、NVARCHAR(50) や DECIMAL(19,5) で定義された値には各プロパティ次のような値が返ってきます。

DECLARE @Memo NVARCHAR(50) = 'Test';

SELECT	SQL_VARIANT_PROPERTY(@Memo, 'BaseType') AS [BaseType],
	SQL_VARIANT_PROPERTY(@Memo, 'Precision') AS [Precision],
	SQL_VARIANT_PROPERTY(@Memo, 'Scale') AS [Scale],
	SQL_VARIANT_PROPERTY(@Memo, 'TotalBytes') AS [TotalBytes],
	SQL_VARIANT_PROPERTY(@Memo, 'Collation') AS [Collation],
	SQL_VARIANT_PROPERTY(@Memo, 'MaxLength') AS [MaxLength];
------------
DECLARE @Amount DECIMAL(19,5) = 15.66;

SELECT	SQL_VARIANT_PROPERTY(@Amount, 'BaseType') AS [BaseType],
	SQL_VARIANT_PROPERTY(@Amount, 'Precision') AS [Precision],
	SQL_VARIANT_PROPERTY(@Amount, 'Scale') AS [Scale],
	SQL_VARIANT_PROPERTY(@Amount, 'TotalBytes') AS [TotalBytes],
	SQL_VARIANT_PROPERTY(@Amount, 'Collation') AS [Collation],
	SQL_VARIANT_PROPERTY(@Amount, 'MaxLength') AS [MaxLength];

変数やスカラー値関数の戻り値などのデータ型を確認する方法 1

変数やスカラー値関数の戻り値などのデータ型を確認する方法 2

変数だけ定義して、値を代入しないで SQL_VARIANT_PROPERTY に渡すと、第一引数が NULL になるので、全てのプロパティが NULL で返ってくるので注意してください。


上記のケースでは SQL_VARIANT_PROPERTY を使う真上でデータ型を指定して変数を宣言しているので、意味があんまりありませんね。

次は暗黙的に変換された値のデータ型を調べてみましょう。

例えば、COALESCE 関数は引数を順番に前からチェックしていって、NULL ではない最初の値を返しますが、戻り値のデータ型は引数の中で優先順位が最も高いデータ型になります。

COALESCE(NULL, 1, '2', 5.5) の戻り値のデータ型を確認してみましょう。 ここでは BaseType のみ確認します。

SELECT	COALESCE(NULL, 1, '2', 5.5) AS Result,
	SQL_VARIANT_PROPERTY(COALESCE(NULL, 1, '2', 5.5), 'BaseType') AS BaseType;

変数やスカラー値関数の戻り値などのデータ型を確認する方法 3

最初の NULL でない値は 1 ですが、1.0 に変換されていて、BaseType は numeric になっていますね。


また、次のように INT 型と INT 型の割り算が INT 型になってしまうことも確認できます。

DECLARE @Value1 INT = 15,
	@Value2 INT = 2;

SELECT	@Value1 / @Value2 AS Result,
	SQL_VARIANT_PROPERTY(@Value1 / @Value2, 'BaseType') AS BaseType;

変数やスカラー値関数の戻り値などのデータ型を確認する方法 4

値のデータ型を確認したくなった時には使ってみてくださいね!

© 2010-2024 SQL Server 入門