当我以为我开始理解SQL时,我完全迷失了。最后一个SELECT的语法出了什么问题?
if (OBJECT_ID('TestTable') IS NOT NULL) drop table TestTable
CREATE TABLE TestTable(
ID Bigint IDENTITY(1,1) PRIMARY KEY,
Num1 bigint NOT NULL,
Num2 bigint NULL
)
INSERT INTO TestTable
VALUES (1,2)
SELECT 'TEXT', 'MORE TEXT', 'AND MORE TEXT'
SELECT 'TEXT', Num1 From TestTable
SELECT 'TEXT', Num1 From TestTable, 'MORE TEXT'
答案 0 :(得分:2)
您必须在指定其来源之前列出您想要选择的所有“列”(引用,因为它们不是表中的所有列)。
问题:
SELECT 'TEXT', Num1 From TestTable, 'MORE TEXT'
是您从TestTable
中选择两列,然后尝试选择另一列。这不是标准的SQL语法。根据文档here(特别是语法图),from
子句是可选的,但如果存在,则必须遵循选择列表。
一旦解析器遇到不属于选择列表的内容,就不能再选择列作为当前query-specification
的一部分。您可以在另一个 query-specification
(query-expression
)中选择更多列,但必须使用{ UNION [ ALL ] | EXCEPT | INTERSECT }
之一与之前的列相关联。
如果您希望将这三列放在一行中,则应使用:
SELECT 'TEXT', Num1, 'MORE TEXT' From TestTable
如果你想要一个带有MORE TEXT
的添加行(我认为这不太可能,因为它的输出没有足够的列),你必须使用两个{{1与query-specification
链接的部分。假设您拥有可用于UNION ALL
输出列的值,您可以使用以下内容:
Num1
答案 1 :(得分:0)
SELECT'TEXT',Num1,'MORE TEXT'来自TestTable
或者可能更有用
选择'TEXT'为col1,Num1为col2,'MORE TEXT'为col3 From TestTable的
在开始from子句
之前,您必须完成选择列列表