假设我有一个返回查询的标量函数:
CREATE FUNCTION [cimpl].[GetQuery]()
RETURNS NVARCHAR(MAX)
AS
BEGIN
RETURN 'SELECT col1, col2, col3 from dbo.table1 '
END
这是一个例子,但它已经是这样了,GetQuery函数可以是任何其他具有不同列的函数,我的目标是将这个结果从不同的sp中放入临时表中。
因此,我需要将它放在临时表中,我的问题是我不想创建临时表,因为我不知道哪些是预期的列,所以我需要在飞行中创建它。有一件事,我不能修改的功能
SELECT *
INTO #temp
FROM cimpl.GetQuery()
SQL Server无法轻松处理具有未指定列的表。如果你知道你可以做的专栏:
create table #temp ( . . . );
declare @sql nvarchar(max);
select @sql = getquery();
insert into #temp (. . . )
exec(@sql);
但你没有。
我不建议我要建议的,但你可以把它发挥作用。我怀疑有更好的方法来解决你真正的问题,但你还没有问过一个能描述这一点的问题。
想法如下:
- 使用
into
- 不要使用临时桌子
假设您的查询在select
中没有子查询,您可以执行:
select @sql = getquery();
set @sql = stuff(@sql, charindex('FROM ', @sql) - 5, 0, ' INTO _temp_table ');
exec(@sql);
这不是一个临时表,所以您需要记住稍后在代码中删除它。