这有什么问题?选择'TEXT',Num1来自TestTab,'更多文字'

时间:2014-02-20 01:04:02

标签: sql tsql ssms

当我以为我开始理解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'

2 个答案:

答案 0 :(得分:2)

您必须在指定其来源之前列出您想要选择的所有“列”(引用,因为它们不是表中的所有列)。

问题:

SELECT 'TEXT', Num1 From TestTable, 'MORE TEXT'

是您从TestTable中选择两列,然后尝试选择另一列。这不是标准的SQL语法。根据文档here(特别是语法图),from子句是可选的,但如果存在,则必须遵循选择列表。

一旦解析器遇到不属于选择列表的内容,就不能再选择列作为当前query-specification的一部分。您可以在另一个 query-specificationquery-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子句

之前,您必须完成选择列列表