jzz*_*zzh 1 sql t-sql sql-server with-statement insert-select
我想选择分层数据并将其插入表格中.因此我需要在插入中使用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关键字.如何在存储过程中执行此类插入?
谢谢!
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.