Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从函数到临时表的动态SQL查询_Sql_Sql Server - Fatal编程技术网

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

从函数到临时表的动态SQL查询,sql,sql-server,Sql,Sql Server,假设我有一个返回查询的标量函数: CREATE FUNCTION [cimpl].[GetQuery]() RETURNS NVARCHAR(MAX) AS BEGIN RETURN 'SELECT col1, col2, col3 from dbo.table1 ' END 这是一个示例,但它已经是这样了,GetQuery函数可以是具有不同列的任何其他函数,我的目标是将此结果从不同的sp中放入临时表中 有了这个结果,我需要把它放在一个临时表中,我的问题是我不想创建临时表,因为我不

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

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

    RETURN  'SELECT col1, col2, col3 from dbo.table1 '
END
这是一个示例,但它已经是这样了,GetQuery函数可以是具有不同列的任何其他函数,我的目标是将此结果从不同的sp中放入临时表中


有了这个结果,我需要把它放在一个临时表中,我的问题是我不想创建临时表,因为我不知道哪些是预期的列,所以我需要在航班上创建它。有一件事,我无法修改函数

SQL Server无法轻松处理具有未指定列的表。如果您知道可以执行的列:

SELECT * 
INTO #temp
FROM cimpl.GetQuery()
create table #temp ( . . . );
declare @sql nvarchar(max);

select @sql = getquery();
insert into #temp (. . . )
    exec(@sql);
但你没有

我不推荐我将要提出的建议,但你可以让它发挥作用。我怀疑有更好的方法来解决你真正的问题,但你没有提出一个能描述这一点的问题

其思路如下:

用于 不要使用临时桌子 假设查询在select中没有子查询,则可以执行以下操作:

select @sql = getquery();

set @sql = stuff(@sql, charindex('FROM ', @sql) - 5, 0, ' INTO _temp_table ');

exec(@sql);

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

您可以通过将FROM替换为类似于INTO mytentable FROM的内容来修改返回的字符串,执行时,它将使用所选列创建临时表,并用查询中的数据填充它。我不知道这是否真的对你有很大帮助。