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

时间:2018-07-18 16:33:12

标签: sql sql-server

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

CREATE FUNCTION [cimpl].[GetQuery]()
RETURNS NVARCHAR(MAX)
AS
BEGIN

    RETURN  'SELECT col1, col2, col3 from dbo.table1 '
END

这是一个示例,但是已经有点像这样了,GetQuery函数可以是具有不同列的任何其他函数,我的目标是将结果从另一个sp放入临时表中。

有了这个结果,我需要将它放在一个临时表中,我的问题是我不想创建一个临时表,因为我不知道期望的列是什么,所以我需要在临时表上创建它。飞行。一件事,我无法修改功能

2 个答案:

答案 0 :(得分:0)

SELECT * 
INTO #temp
FROM cimpl.GetQuery()

答案 1 :(得分:0)

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

这不是临时表,因此您需要记住稍后在代码中将其删除。