はじめに
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段階ネストして列名にフォーカスを当てるとポップアップで列の型が表示されます。
その他、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の正体か不明)