从函数到临时表的动态SQL查询



假设我有一个返回查询的标量函数:

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);

这不是一个临时表,所以您需要记住稍后在代码中删除它。

最新更新