如何执行此SQL查询

时间:2014-04-11 06:53:23

标签: sql sql-server sql-server-2008 tsql

我有以下情景

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将会发生什么。

请帮助任何人......

2 个答案:

答案 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