首页 > 解决方案 > 使用带有动态参数的过程选择 INTO 动态临时表

问题描述

我找不到我的问题的完整解决方案。我有一个将动态输入作为参数值的现有存储过程。我需要执行这个过程(使用动态变量)并且想以某种方式 SELECT * INTO #mytable 而不必声明临时表的模式。

我尝试过使用 OPENROWSET 但它不允许我指定变量(仅对其进行硬编码):

select * into #table from openrowset('SQLNCLI', 'Server=localhost;Trusted_Connection=yes;', 'exec SERVER..MYSTOREDPROCEDURE @parameter = 123')

我知道的唯一另一种方法是将它包装在一个字符串中并使用 EXEC(@sql),但我不知道如何从中“选择 * INTO #table”。

我有哪些选择?我可以创建一个可以返回动态表的 UDF 表函数吗?疑...

标签: sqlsql-server

解决方案


我想我想通了。我真的只需要修改临时变量名称就可以将临时表放到全局范围内。这适用于我的实际表(为了这篇文章的目的,我重命名了它们)。

IF OBJECT_ID ('tempdb..##mytemptable') is not null drop table ##mytemptable

declare @id int = 112

declare @sql nvarchar(max) ='SELECT * INTO ##mytemptable FROM OPENROWSET(''SQLNCLI'', ''Server=localhost;Trusted_Connection=yes;'', ''exec SERVER..MyStoredProcedure @ID =' + convert(varchar(10), id) + ''')'

-- invokes and inserts into ##mytemptable
exec sp_executesql @sql

-- now I can query from the global scope
select * from ##mytemptable

推荐阅读