【问题标题】:SQL select into syntaxSQL 选择成语法
【发布时间】:2018-02-16 15:59:52
【问题描述】:

我正在尝试在存储过程中使用 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 循环并将更多记录插入到同一个表中。

我做错了什么?

谢谢

【问题讨论】:

  • 您使用的是哪个 dbms? (该代码似乎是特定于产品的。)
  • 猜测这是 SQL Server,您将需要 ) 之后的别名,但否则这是正确的。如果它是 SQL Server 并且别名没有解决您的问题,则它是您的 proc 中未显示的其他内容。错误信息是什么?
  • 你得到什么错误?
  • 大家好,很抱歉延迟回复并感谢 cmets。
  • 是的,它是 SQL Server。没有实际的错误消息,因为我还不能运行该程序。我只是通过下一个动词下的红色波浪线,这似乎是说我的语法是错误的。也许我不应该担心这个,然后继续努力

标签: sql select stored-procedures


【解决方案1】:

感谢大家的帮助

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

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

ta!

【讨论】:

    【解决方案2】:

    错误提到了什么?如果您在 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
    

    【讨论】:

    • 是的,我意识到你只能选择一次临时表,tks。我实际上并没有全部运行。只通过语法检查器 - 如上面最后一条评论所述
    【解决方案3】:

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

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

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

    【讨论】:

    • 我想我可以将所有子选择语句翻译成主查询,但当时似乎有点痛苦——我需要用不同的链接链接到同一个表几次,并且编写一些子查询更容易。可能会达到我不知道的表现,但每次只能从一条记录中返回一个字段。是的表只是为了发布,是的,其余的查询都可以。认为我只是要忽略语法检查器并完成它并运行它并查看
    • 嗨,戈登,你知道在单个 SELECT 中使用 6 个连接与六个单独的选择(或者我想是六个子查询)之间的性能差异吗?在每种情况下,我只会从表中返回 1 条记录。谢谢
    • @jfly62 。 . .没有一般规则,但没有理由避免使用六个连接的查询。复杂的查询是 SQL 存在的原因。
    猜你喜欢
    • 2020-12-30
    • 2011-07-28
    • 2018-06-05
    • 2019-08-25
    • 2019-05-06
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    相关资源
    最近更新 更多