使用SQL Query的Schema创建表

时间:2016-04-23 02:00:02

标签: sql sql-server

我需要从sql查询的返回模式创建表。这里,sql查询有多个连接。 示例 - 在下面的场景中,为列' r'创建表模式。 &安培; '吨'

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

我无法使用'选择声明'因为我得到一个输入sql select语句,需要在运行时将该查询的输出复制到目标表。

3 个答案:

答案 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注入。