我需要从sql查询的返回模式创建表。这里,sql查询有多个连接。 示例 - 在下面的场景中,为列' r'创建表模式。 &安培; '吨'
select a.x as r b.y as t
from a
JOIN b
ON a.m = b.m
我无法使用'选择声明'因为我得到一个输入sql select语句,需要在运行时将该查询的输出复制到目标表。
答案 0 :(得分: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
答案 1 :(得分: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
答案 2 :(得分: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注入。