MS SQL Server中使用CREATE TABLE结合SELECT语句创建新表时出现语法错误的问题求助
MS SQL Server中使用CREATE TABLE结合SELECT语句创建新表时出现语法错误的问题求助
嗨,这问题我之前踩过坑!你之所以会报语法错误,是因为用了其他数据库(比如MySQL、Oracle)的语法,MS SQL Server并不支持这种写法~
先还原下你的问题场景:
执行
SELECT * FROM dbo.transactions时能正常返回所有行和列,但尝试用以下两种方式创建新表时总是报错:CREATE TABLE dbo.all_transactions SELECT * FROM dbo.transactions或者
CREATE TABLE dbo.all_transactions AS SELECT * FROM dbo.transactions错误信息都是:
Msg 156, Level 15, State 1, Line 2 Incorrect syntax near the keyword 'SELECT'
给你两个SQL Server原生支持的正确写法:
方法一:用SELECT INTO直接创建表并插入数据
这是最便捷的方式,会自动根据查询结果的结构生成新表,同时把数据同步进去:
SELECT * INTO dbo.all_transactions FROM dbo.transactions
⚠️ 注意:如果dbo.all_transactions这个表已经存在,这条语句会报错,适合用来创建全新的空表+导入数据。
方法二:先创建表结构,再插入数据
如果已经提前创建了目标表(或者需要手动自定义表结构),可以用INSERT INTO结合SELECT来导入数据:
-- 先手动创建和原表结构匹配的表(如果还没建) CREATE TABLE dbo.all_transactions ( transaction_id INT, amount DECIMAL(18,2), -- 这里要和transactions表的列一一对应,按需添加其他列 ) -- 再从原表导入数据 INSERT INTO dbo.all_transactions SELECT * FROM dbo.transactions
总结下:SQL Server不支持CREATE TABLE ... AS SELECT或者CREATE TABLE直接后跟SELECT的语法,换成上面两种写法就能解决问题啦!
备注:内容来源于stack exchange,提问作者Marcin
相关产品推荐
相关产品推荐

