从函数到临时表的动态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的内容来修改返回的字符串,执行时,它将使用所选列创建临时表,并用查询中的数据填充它。我不知道这是否真的对你有很大帮助。