我有以下情景
Drop Table #Temp
Create Table #Temp(name1 text, name2 text)
Insert INTO #Temp Values ('test','test')
Insert INTO #Temp Values ('test','test')
Insert Into #Temp1 Select * From
(
;With CTE as (
Select * from #Temp
)
select * from CTE
)
我知道我们不能使用CTE
作为子查询..但是由于困难,我不知道子查询的确切语法,因为它是由其他系统提供的。
只是想象一下这个
Insert Into #Temp1 Select * From
(
"Query Provided by Other System"
)
所以我对子查询没有任何控制权(" 其他系统提供的查询")..而且我也尝试了动态的SQL查询,如
Declare @subquery nvarchar(max)
set @subquery=';With CTE2 as ( Select * from #Temp) select * from CTE2'
INSERT INTO #Temp1 From (EXEC sp_executesql @subquery)
这也会给出错误......
更多要了解的事情:
i)我不知道子查询返回的列是什么
ii)我在子查询中没有任何控制权。喜欢子查询的语法是什么样的?
所以从这些事情来看,即使我不能使用动态sql(EXEC sp_executesql
)。因为我不知道如果@subquery
本身包含动态sql将会发生什么。
请帮助任何人......
答案 0 :(得分:1)
像这样使用动态sql。它会起作用......
Insert Into #Temp1
EXEC sp_executesql @subquery
答案 1 :(得分:0)
您可以使用以下语法
;With CTE as (
Select * from #Temp
)
Insert Into #Temp1
Select *
From (
select * from CTE
) t
或者如果您还没有创建#Temp1表,请使用以下代码。它将根据所选字段
自动创建#temp1表;With CTE as (
Select * from #Temp
)
Select *
Into #Temp1
From (
select * from CTE
) t
除语法外,您可以按照以下简化上述SQL代码
;With CTE as (
Select * from #Temp
)
Insert Into #Temp1
Select *
From CTE
或更好
Insert Into #Temp1
Select * from #Temp