お試しクエリにも便利なVALUES構築子


VALUES構築子はINSERT文以外でも使えます(SQL-99から)。

SELECT
    *
FROM
    (VALUES
        (1, 'Alice')
      , (2, 'Bob')
      , (3, 'Carol')
    ) AS users
        (id, name)
id name
1 Alice
2 Bob
3 Carol

もちろん、JOINすることもできます。

SELECT
    users.id
  , users.name
  , comments.comment
FROM
    (VALUES
        (1, 'Alice')
      , (2, 'Bob')
      , (3, 'Carol')
    ) AS users
        (id, name)
LEFT OUTER JOIN
    (VALUES
        (1, 'Hello')
      , (3, 'World')
    ) AS comments
        (user_id, comment)
    ON users.id = comments.user_id
id name comment
1 Alice Hello
2 Bob NULL
3 Carol World

UPDATEやDELETEはできないものの、一時テーブルを作らずに済むので楽です。

データ型はどうなるの?

SQL Serverで値の情報を調べるには、SQL_VARIANT_PROPERTY関数を使います。

SELECT
    *
  , SQL_VARIANT_PROPERTY(id, 'BaseType') id_type
  , SQL_VARIANT_PROPERTY(name, 'BaseType') name_type
FROM
    (VALUES
        (1, 'Alice')
      , (2, 'Bob')
      , (3, 'Carol')
    ) AS users
        (id, name)
id name id_type name_type
1 Alice int varchar
2 Bob int varchar
3 Carol int varchar

値に応じて、適当なデータ型が与えられるようです。