TSQL:WITH cteTABLE插入other_table

jzz*_*zzh 1 sql t-sql sql-server with-statement insert-select

可能重复:
关键字'with'...前面的语句附近的语法不正确必须以分号结束

我想选择分层数据并将其插入表格中.因此我需要在插入中使用WITH语句.

这很好用:

create table test_table
(
 id int
)   

with t_table 
as
(select 12345 wert)
insert into test_table (id)
select wert from t_table
Run Code Online (Sandbox Code Playgroud)

但这会生成"WITH关键字附近的错误语法"错误:

CREATE PROCEDURE p_insert_test
AS
BEGIN

with t_table 
as
(select 12345 wert)
insert into test_table (id)
select wert from t_table

END
Run Code Online (Sandbox Code Playgroud)

我猜T-SQL在INSERT关键字之前不喜欢WITH关键字.如何在存储过程中执行此类插入?

谢谢!

JNK*_*JNK 5

CTE声明需要是批处理中的第一个命令.

只需在分号前添加一个分号WITH,你应该没问题:

;WITH t_Table...

编辑:

我想弄清楚,为什么是这样的情况下,WITH使用关键字查询提示为好,如WITH RECOMPILE,WITH (NOLOCK)等查询引擎需要知道的意图WITH关键字,并表示唯一的方式,它代表了CTE是要确保该CTE声明是该批次的开始.

否则,你可能会有一些含糊不清的东西:

SELECT Field
FROM MyTable
WITH CteName
As
(Select 1)
Run Code Online (Sandbox Code Playgroud)

如果没有语句终止符,CteName将被不恰当地读作应用于查询提示MyTable.

  • +1:或者,或者put,确保前面的命令以`;`结束.在大多数情况下它是可选的,但是当使用CTE时,需要"正确"终止上一个命令. (5认同)