Mr *_*017 0 sql sql-server sql-server-2014
有谁知道为什么INTO关键字在下面的第一个方法中工作,但不是第二个?
我在本视频的前5分钟内获得了关于创建临时表的两种方法:https://www.youtube.com/watch?v = 3ZtYrELHP8M
方法1
SELECT
CAST (date AS DATE) AS #DateWk
INTO
#DateWk
FROM
AggregatedSalesHistory
WHERE
date >= '1-2-2014'
SELECT * FROM #DateWk
Run Code Online (Sandbox Code Playgroud)
当我尝试方法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
Run Code Online (Sandbox Code Playgroud)
如果表已经存在,则不SELECT .... INTO ....能再使用- 您需要使用:
INSERT INTO #DateWk
SELECT CAST (date AS DATE)
FROM AggregatedSalesHistory
WHERE date >= '1-2-2014'
Run Code Online (Sandbox Code Playgroud)
你已经指定INSERT INTO在开始-做不添加INTO ..后SELECT,然后它应该工作得很好.
所以,如果你这样做
SELECT (list of columns)
INTO SomeTable
FROM ....
WHERE.....
Run Code Online (Sandbox Code Playgroud)
然后这SELECT将自动创建SomeTable表 - 但如果已经存在,此代码将失败SomeTable - 在这种情况下使用:
INSERT INTO SomeTable(list-of-columns)
SELECT (list of columns)
FROM ....
WHERE.....
Run Code Online (Sandbox Code Playgroud)
更新:通常认为总是明确指定要插入的列是一种好习惯- 以避免像现在这样的问题.
所以将你的陈述改为:
INSERT INTO #DateW (ReleaseDate)
SELECT CAST (date AS DATE)
FROM AggregatedSalesHistory
WHERE date >= '1-2-2014'
Run Code Online (Sandbox Code Playgroud)
如果未在INSERT语句中指定表名后面的列列表,则必须为表的所有列提供值- 按它们在表中显示的顺序.
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |