1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SQL Serverでテーブルを指定せず列のみを記述した場合の型の正体を知る

Posted at

はじめに

SQL Serverに限った話ではありませんが、テーブルを指定せずSELECTだけでもクエリを実行することができます。

通常、From句でテーブルを指定してデータ出力する場合、テーブル列の型で出力されますが、下記クエリの場合でも、SQL Serverが出力可能な型を選択して出力してくれます。

サンプルクエリ

SELECT
 0      AS Num_A
,1 + 1  AS Num_B
,0.1    AS Num_C
,'abc'  AS Str_A
,N'def' AS Str_B

結果

Num_A Num_B Num_C Str_A Str_B
0 2 0.1 abc def

各列の型を知る

SQL Server Management Studioで各列の型を知る場合、1段階ネストして列名にフォーカスを当てるとポップアップで列の型が表示されます。

image.png

その他、VIEWを作成しても同様の事が行えます。

サンプルクエリ

各列の型をコメントに記載しています。

SELECT
 X.Num_A -- INT
,X.Num_B -- INT
,X.Num_C -- NUMERIC
,X.Str_A -- VARCHAR
,X.Str_B -- NVARCHAR
FROM
(
  SELECT
   0      AS Num_A
  ,1 + 1  AS Num_B
  ,0.1    AS Num_C
  ,'abc'  AS Str_A
  ,N'def' AS Str_B
) AS X

明示的に型を指定する

CONVERTで型を明示的に指定します。

SELECT
 CONVERT(INT,1)          AS INT_A
,CONVERT(NVARCHAR,'abc') AS NVARCHAR_A

おまけ

SQL Serverで以下のクエリを投げると、1件のデータが返ってきます。

SELECT COUNT(*)
(列名なし)
1

OracleのDUALの様な挙動をするので実行計画で見てみると、テーブル指定をしてないのにテーブルスキャンを行っていました(これが1の正体か不明)

image.png

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?