Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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_Stored Procedures - Fatal编程技术网

Sql 动态查询存储过程中创建的临时表

Sql 动态查询存储过程中创建的临时表,sql,stored-procedures,Sql,Stored Procedures,我已经创建了一个存储过程来创建一个临时表。现在我需要能够使用.NET对其进行查询。所以我需要像这样的东西: SELECT * FROM storedProcedure() WHERE ... insert into @t(<columns here>) exec stored_procedure; 存储过程创建的表也是动态的,因此模式将发生更改。使用SQLServer2005 我不能使用函数,因为需要返回的是动态表。必须预先定义表使得函数没有用处 我最终在动态SQL的帮助

我已经创建了一个存储过程来创建一个临时表。现在我需要能够使用.NET对其进行查询。所以我需要像这样的东西:

SELECT * FROM storedProcedure() WHERE ...
insert into @t(<columns here>)
    exec stored_procedure;
存储过程创建的表也是动态的,因此模式将发生更改。使用SQLServer2005

我不能使用函数,因为需要返回的是动态表。必须预先定义表使得函数没有用处


我最终在动态SQL的帮助下创建了一个全局临时表。我能够创建一个动态全局临时表并通过.NET访问它。

正如参考资料所示,您可以使用如下内容:

SELECT * FROM storedProcedure() WHERE ...
insert into @t(<columns here>)
    exec stored_procedure;

当然,每种方法都有优点和缺点。存储过程方法的一个缺点是不能嵌套这样的存储过程。函数方法的一个缺点是不能使用动态SQL

实际上,您可以像这样从存储过程中进行选择

select * 
from openrowset('SQLNCLI', 'Server=<your server here>;Database=<your database here>;Trusted_Connection=yes;','set fmtonly off exec <your procedure here>')
选择*
从openrowset('SQLNCLI','Server=;Database=;Trusted_Connection=yes;','set fmtonly off exec')

一、 但是,不建议在生产环境中执行此操作,请考虑将存储过程更改为用户定义的函数

请参阅此帖子:[[1]:我们可以假设SQL Server是您的RDBMS吗?全局临时表如何?@Bridge我在考虑全局临时表,但如果同时有多个事务进行,它不会被覆盖吗?@BWS感谢链接,我将尝试此解决方案。@Bridge我最终使用全局临时表作为函数,无法返回动态table没有帮助。谢谢你的建议。然后使用函数是否可以返回动态表,因为正如我在函数中看到的,您必须在创建时声明返回的表及其架构?@user1938919…对于内联表值函数,return子句指定格式。对于多行表值函数,t当您需要将类型声明为定义的一部分时。但是,要在表中捕获存储过程结果,您需要在执行插入之前定义表,因此您也需要表定义。如果不起作用,那么我需要能够使用JSON创建动态表,将其与另一个表连接,然后返回该表待查询。谢谢。