简体   繁体   English

如何执行此SQL查询

[英]How to execute this SQL Query

I am having following scenario 我有以下情况

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
)

I know we can't use CTE as subquery .. but for hard time I don't know exact syntax of subquery since it is being provided by other system. 我知道我们不能将CTE用作子查询..但是由于我是由其他系统提供的,所以我很难知道子查询的确切语法。

just image this 只是成像这个

 Insert Into #Temp1 Select * From 
    (
     "Query Provided by Other System"
    )

So I don't have any control on subquery (" Query Provided by Other System ").. And I have also tried dynamic sql query like 因此,我对子查询(“ 由其他系统提供的查询 ”)没有任何控制。而且我也尝试了动态sql查询,例如

Declare @subquery nvarchar(max)

set @subquery=';With CTE2 as ( Select * from #Temp) select * from CTE2'

INSERT INTO #Temp1 From (EXEC sp_executesql @subquery)

This also gives error... 这也给错误...

More Things to know : 更多须知

i)I don't know about what are the columns will sub query returns 我不知道子查询返回的列是什么

ii)And I don't have any control in sub query . ii)我在子查询中没有任何控制权。 like what is syntax of subquery and how it looks like? 例如子查询的语法是什么,它的外观如何?

so from these things, even I can't use dynamic sql ( EXEC sp_executesql ).because I don't know what will happen if @subquery itself contains dynamic sql. 所以从这些事情来看,即使我不能使用动态sql( EXEC sp_executesql )。因为我不知道如果@subquery本身包含动态sql会发生什么。

Please help anyone... 请帮助任何人...

Use like this, with dynamic sql. 这样使用动态sql。 It will work... 会的...

Insert Into #Temp1 
EXEC sp_executesql @subquery

You can use the below syntax 您可以使用以下语法

;With CTE as (
    Select * from #Temp
) 
Insert Into #Temp1 
Select * 
From (
    select * from CTE
) t

or if you don't have already created the #Temp1 table, use below code. 或者,如果您尚未创建#Temp1表,请使用以下代码。 It will automatically create the #temp1 table according to the selected fields 它将根据所选字段自动创建#temp1表

;With CTE as (
    Select * from #Temp
) 
Select * 
Into #Temp1 
From (
    select * from CTE
) t

Besides syntax, you can simplify above SQL code as follows 除了语法,您还可以按如下方式简化上述SQL代码

;With CTE as (
    Select * from #Temp
) 
Insert Into #Temp1 
Select * 
From CTE

or better 或更好

Insert Into #Temp1 
Select * from #Temp

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM