大多数其他数据库允许您使用VALUES
. 据我所知,SQL Server 允许您使用子查询执行此操作:
SELECT * FROM (
VALUES
('Cornelius','Eversoe', '[email protected]'),
('Ebenezer','Splodge', '[email protected]'),
('Sylvester','Underbar', '[email protected]'),
('Cynthia','Hyphen-Smythe', '[email protected]')
) as sq(givenname,familyname,email);
但我似乎无法让它与 CTE 一起使用。我能做的最好的就是在 CTE 中嵌入一个子查询:
WITH data AS (
SELECT * FROM (
VALUES
('Cornelius','Eversoe', '[email protected]'),
('Ebenezer','Splodge', '[email protected]'),
('Sylvester','Underbar', '[email protected]'),
('Cynthia','Hyphen-Smythe', '[email protected]')
) as sq(givenname,familyname,email)
)
SELECT * FROM data;
我更喜欢 CTE 因为它们的可读性,但是有没有更直接的方法呢?例如 PostgreSQL、MariaDB(支持版本)和 SQLite 都接受这个:
WITH data(givenname,familyname,email) AS (
VALUES
('Cornelius','Eversoe', '[email protected]'),
('Ebenezer','Splodge', '[email protected]'),
('Sylvester','Underbar', '[email protected]'),
('Cynthia','Hyphen-Smythe', '[email protected]')
)
SELECT * FROM data;
不,SQL Server 目前仅支持派生表(或语句的子句)中的表值构造函数。因此,您可以在联接(包括应用)或派生表(“子查询”)中使用,但不能在公用表表达式中使用。
VALUES
INSERT ... VALUES
VALUES
遗憾的是,与其他流行的 SQL 数据库相比,T-SQL 在几个方面都落后,例如添加对 ANSI 标准行值构造函数的支持。