2016-04-23 56 views
0

我需要從sql查詢的返回模式創建表格。在這裏,sql查詢有多個連接。 示例 - 在以下方案中,爲'r'列創建表模式&'t'。使用SQL查詢模式創建表格

select a.x as r b.y as t 
from a 
JOIN b 
ON a.m = b.m 

我不能用「select into語句」,因爲我得到一個輸入SQL SELECT語句並需要在該查詢的輸出在運行時複製到目標表。

+0

看起來你正在尋找插入條款。 –

回答

0

如果我正確地讀你的問題,你得到來自外部源的SQL,你想運行爲表(可能與數據,可能沒有)。這應該這樣做:

use tempdb; 
declare @userSuppliedSQL nvarchar(max) = N'select top 10 * from Util.dbo.Numbers'; 

declare @sql nvarchar(max); 

set @sql = concat(' 
with cte as (
', @userSuppliedSQL, ' 
) 
select * 
into dbo.temptable 
from cte 
where 9=0 --delete this line if you actually want data 
;'); 
print @sql 

exec sp_executesql @sql; 
select * from dbo.temptable; 

這假設提供的查詢是合法用作公用表表達式(例如,全列命名和獨特)的身體。請注意,您不能選擇臨時表(即#temp),因爲臨時表僅在sp_executesql調用期間存在。

另外,爲了滿足所有神聖的愛,請理解通過運行用戶通過的任意SQL,您可以打開自己的SQL注入。

+1

我瞭解sql注入的風險,並由其他服務線團隊接受用戶請求。 –

0

這裏使用into子句。像

Select col1, col2, col3 
into newtable 
from old table; 

select a.x as r b.y as t 
into c 
from a 
JOIN b ON a.m = b.m 
+0

首先創建結構然後使用總是更好,因此您需要使用任何永遠不會滿足的條件。 –

0

我知道你說你不能進入,但你可以選擇與0 = 1創建一個空表結構,然後插入之後呢?

select a.x as r b.y as t 
into TABLE 
from a 
JOIN b 
ON a.m = b.m 
where 0 = 1