、あなたは外部ソースからの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;
これは、供給されたクエリは、共通テーブル式(例えば、すべての列の名前とユニークされている)のボディとして使用するための法的であることを前提としています。一時表はsp_executesql
呼び出しの間だけ存在するため、一時表(#temp)を選択できないことに注意してください。
また、聖なるものを愛するために、ユーザーが渡す任意のSQLを実行することによって、自分自身をSQLインジェクションまで開いていることを理解してください。
あなたはinsert into節を探しているようです。 –