我试图在存储过程中使用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循环并将更多记录插入到同一个表中。
我做错了什么?
感谢
答案 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!