【问题标题】:Converting SQL query result to temp table将 SQL 查询结果转换为临时表
【发布时间】:2018-07-13 14:12:14
【问题描述】:

我正在尝试将我的 sql 结果转换为临时表,但它不断返回以下错误:

期待 As 或 Id 或quoted-ID。

我知道 sql 结果是正确的,但是当我添加SELECT * INTO #newtable FROM 时,sql 查询不起作用。 怎么了?

SELECT *
INTO #newtable
FROM 
    (
    SELECT
        Url,Id 
    FROM Blob 
    WHERE 
        Id IN 
            (
            SELECT 
                BlobId 
            FROM 
                XrefBlobProjectMeeting
            ) 
        AND Extension NOT IN ('xlsx','xls','avi','jpg','mp4','wmv','png')
        AND (RefContentTypeId IN (11,13,14,35))
    )

【问题讨论】:

  • 尝试添加到末尾:as x
  • 这是 MySQL 还是 sql server?答案可能不同
  • @RaymondNijland INSERT INTO ... SELECTSELECT...INTO 的行为非常不同。
  • @RaymondNijland 它没有。它说它“基本相同”。我实际上完全不同意这一点。对于 SyBase(现在是 SQL Server),如果您要运行 INSERT INTO dbo.MyTable SELECT 1 AS i;,该语句将失败,但是,SELECT 1 AS i INTO dbo.MyTable; 将正常工作。相反,CREATE TABLE MyTable (i int); INSERT INTO dbo.MyTable SELECT 1 AS i; 可以正常工作,但CREATE TABLE MyTable (i int); SELECT 1 AS i INTO dbo.MyTable; 不会。
  • SELECT..INTO 语法将创建对象作为语句的一部分。如果对象已经存在,则语句失败。对于INSERT INTO...SELECT,情况完全相反;该对象必须已经存在,如果不存在,则语句将失败。

标签: sql sql-server temp-tables


【解决方案1】:

不知道为什么你有嵌套的SELECTs。这是您更有可能追求的,因为您不必为子查询起别名:

SELECT Url,
       Id
INTO #newtable
FROM Blob
WHERE Id IN (SELECT BlobId FROM XrefBlobProjectMeeting)
  AND Extension NOT IN ('xlsx', 'xls', 'avi', 'jpg', 'mp4', 'wmv', 'png')
  AND (RefContentTypeId IN (11, 13, 14, 35));

不过,将IN 更改为EXISTS 会更好:

SELECT [Url],
       Id
INTO #newtable
FROM Blob B
WHERE EXISTS (SELECT 1
              FROM XrefBlobProjectMeeting E
              WHERE E.BlobID = B.ID)
  AND Extension NOT IN ('xlsx', 'xls', 'avi', 'jpg', 'mp4', 'wmv', 'png')
  AND RefContentTypeId IN (11, 13, 14, 35);

【讨论】:

  • 回答您对问题的评论,@Yash,因为它与答案有关。这将创建临时表#newtable。任何名称以# 开头的表都是临时表,只有一个# 的表只会在创建它的连接期间持续存在。
  • 谢谢你说得通。
【解决方案2】:

我只以你的方式尝试过你的问题,它对我有用。解决方案如下所示;

SELECT Url,Id
INTO #newtable
    FROM Blob 
    WHERE 
        Id IN 
            (
            SELECT 
                BlobId 
            FROM 
                XrefBlobProjectMeeting
            ) 
        AND Extension NOT IN ('xlsx','xls','avi','jpg','mp4','wmv','png')
        AND (RefContentTypeId IN (11,13,14,35))

【讨论】:

    猜你喜欢
    • 2021-02-06
    • 2015-11-12
    • 2011-07-23
    • 1970-01-01
    • 2013-03-25
    • 2012-04-01
    • 2011-06-26
    • 2012-12-18
    • 2011-10-27
    相关资源
    最近更新 更多