首页 > 解决方案 > INTO 关键字的错误信息

问题描述

有谁知道为什么 INTO 关键字在下面的第一种方法中起作用,而在第二种方法中不起作用?

我从该视频的前 5 分钟获得了关于创建临时表的两种方法:https ://www.youtube.com/watch?v=3ZtYrELHP8M

方法一

SELECT 
    CAST (date AS DATE) AS #DateWk  
INTO
    #DateWk  
FROM
    AggregatedSalesHistory
WHERE 
    date >= '1-2-2014' 

SELECT * FROM #DateWk

当我尝试方法 2 时,我收到以下错误消息:

关键字“INTO”附近的语法不正确。

这是方法2的代码:

CREATE TABLE #DateWeek
(   
    Title VARCHAR(MAX),
    ReleaseDate DATETIME
)

INSERT INTO #DateWk
    SELECT 
        CAST (date AS DATE) AS #DateWk,  
    INTO #DateWk  
    FROM AggregatedSalesHistory
    WHERE date >= '1-2-2014' 

SELECT * FROM #DateWk

标签: sqlsql-serversql-server-2014

解决方案


如果表已经存在,则不SELECT .... INTO ....能再使用 - 您需要使用:

INSERT INTO #DateWk
    SELECT CAST (date AS DATE)   
    FROM AggregatedSalesHistory
    WHERE date >= '1-2-2014' 

您已经INSERT INTO在开头指定了 - 不要INTO ..之后添加 aSELECT然后它应该可以正常工作。

所以如果你这样做

SELECT (list of columns)
INTO SomeTable
FROM ....
WHERE..... 

那么这SELECT将自动创建表 - 但如果已经存在SomeTable此代码将失败- 在这种情况下使用:SomeTable

INSERT INTO SomeTable(list-of-columns)
    SELECT (list of columns)
    FROM ....
    WHERE..... 

更新:通常认为始终明确指定要插入的列是一种好习惯 - 以避免出现像现在这样的问题。

因此,将您的声明更改为:

INSERT INTO #DateW (ReleaseDate)
    SELECT CAST (date AS DATE) 
    FROM AggregatedSalesHistory  
    WHERE date >= '1-2-2014' 

如果您没有在语句中的表名之后指定列列表,则必须为表的所有INSERT列提供值- 按照它们在表中出现的顺序。


推荐阅读