可能重复:
Incorrect syntax near the keyword 'with'…previous statement must be terminated with a semicolon
我想选择分层数据并将其插入表格中。 因此我需要在插入中使用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关键字。 如何在存储过程中执行此类插入?
谢谢!
答案 0 :(得分:5)
CTE声明需要是批次中的第一个命令。
只需在WITH
之前添加一个分号,你应该没问题:
;WITH t_Table...
修改强>
为了澄清为什么这种情况,WITH
关键字也用于查询提示,例如WITH RECOMPILE
,WITH (NOLOCK)
等。查询引擎需要知道WITH
关键字的意图,并且表示它代表CTE
的唯一方法是确保CTE
声明是批处理的开头。
否则,你可能会有一些含糊不清的东西:
SELECT Field
FROM MyTable
WITH CteName
As
(Select 1)
如果没有语句终结符,CteName
将被不恰当地理解为应用于MyTable
的查询提示。