我需要從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語句並需要在該查詢的輸出在運行時複製到目標表。
我需要從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語句並需要在該查詢的輸出在運行時複製到目標表。
如果我正確地讀你的問題,你得到來自外部源的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注入。
我瞭解sql注入的風險,並由其他服務線團隊接受用戶請求。 –
這裏使用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 = 1創建一個空表結構,然後插入之後呢?
select a.x as r b.y as t
into TABLE
from a
JOIN b
ON a.m = b.m
where 0 = 1
看起來你正在尋找插入條款。 –