我创建了一个创建临时表的存储过程。现在我需要能够使用.NET查询它。所以我需要这样的东西:
SELECT * FROM storedProcedure() WHERE ...
存储过程创建的表也是动态的,因此架构会发生变化。使用SQL Server 2005。
我无法使用函数,因为需要返回的是动态表。必须预先定义表使功能无用。
我最终在动态SQL的帮助下创建了一个全局临时表我能够创建一个动态全局临时表并通过.NET访问它。
答案 0 :(得分:1)
如参考文献所示,您可以使用以下内容:
insert into @t(<columns here>)
exec stored_procedure;
但是,在许多情况下,您可以使用用户定义的函数替换此类存储过程。这些被定义为返回值,并且可以完全按照您想要的方式使用:
select *
from dbo.udf_MyFunction();
当然,每种方法都有优点和缺点。存储过程方法的一个缺点是您无法嵌套此类存储过程。函数方法的一个缺点是您不能使用动态SQL。
答案 1 :(得分:0)
实际上,您可以从这样的存储过程中选择
select *
from openrowset('SQLNCLI', 'Server=<your server here>;Database=<your database here>;Trusted_Connection=yes;','set fmtonly off exec <your procedure here>')
但是,我不建议在生产中执行此操作,请考虑将存储过程更改为用户定义的函数