SQL选择语法

时间:2017-09-07 20:13:37

标签: sql select stored-procedures

我试图在存储过程中使用select into语句创建一个临时表,如下所示:

SELECT *
INTO #GENEALOGY
FROM
( 
SELECT field1, field2, 
    (SELECT fieldA from tableY WHERE...) as field3,
    (SELECT fieldB from tableY WHERE...) as field4
FROM table
WHERE condition
)

我在此结束括号后键入的任何命令都未通过语法检查(例如另一个SELECT语句)。 我已经尝试在整个语句之前和之后放置BEGIN和END,然后开始我的下一个命令。 我尝试过添加

AS tablename

在结束括号之后,然后是下一个声明,但它不是那样的

我已尝试删除#但同样的问题。

我实际上需要在此之后运行WHILE循环并将更多记录插入到同一个表中。

我做错了什么?

感谢

3 个答案:

答案 0 :(得分:0)

出于好奇,你为什么要使用子查询?

SELECT field1, field2, 
    (SELECT fieldA from tableY WHERE...) as field3,
    (SELECT fieldB from tableY WHERE...) as field4
INTO #GENEAOLOGY
FROM table
WHERE condition;

您的查询结构没问题。如果在编程块中,则应在末尾包括分号。我假设table是一个真实姓名,并且查询的其他部分在语法上是正确的。

答案 1 :(得分:0)

错误提到了什么?如果您在SSMS中多次运行此操作,则第二次临时表已经存在并且可能是错误。

你说别名是不够的,但这是一个正确的句子:

SELECT *
INTO #GENEALOGY
FROM
( 
SELECT field1, field2, 
    (SELECT fieldA from tableY WHERE...) as field3,
    (SELECT fieldB from tableY WHERE...) as field4
FROM table
WHERE condition
) as TableNameAlias

答案 2 :(得分:0)

感谢大家的帮助

最后我改为INSERT INTO而不是SELECT INTO因为 a)我需要做两个不同的选择查询来获取我需要的数据(第一个记录为1,所有后续记录为第二个),第二个查询无论如何都必须是INSERT b)如果我从水晶报告中调用该过程,我不确定sql server将保持临时表打开多长时间

所以我创建了一个固定的表,使用SELECT INTO并删除所有记录作为我的sp的第一行以清除不需要的数据

TA!