1

可能重复:
关键字“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

但这会产生“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

我猜 T-SQL 不喜欢 INSERT 关键字之前的 WITH 关键字。我怎样才能在存储过程中进行这种插入?

谢谢!

4

1 回答 1

5

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

只需在 the 前加一个分号就WITH可以了:

;WITH t_Table...

编辑:

只是为了澄清为什么会这样,WITH关键字也用于查询提示,例如WITH RECOMPILE,WITH (NOLOCK)等。查询引擎需要知道WITH关键字的意图,并且表示它代表 a 的唯一方法CTE是确保声明CTE是批次的开始。

否则,您可能会有一些模棱两可的东西,例如:

SELECT Field
FROM MyTable
WITH CteName
As
(Select 1)

如果没有语句终止符,CteName将不恰当地读取为应用于MyTable.

于 2011-12-12T16:00:53.557 回答