0

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

SELECT * FROM storedProcedure() WHERE ...

存储过程创建的表也是动态的,因此架构会发生变化。使用 SQL Server 2005。

我不能使用函数,因为需要返回的是动态表。必须事先定义表使函数无用。

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

4

2 回答 2

1

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

insert into @t(<columns here>)
    exec stored_procedure;

但是,在许多情况下,您可以将此类存储过程替换为用户定义的函数。这些被定义为返回值,并且可以完全按照您的需要使用:

select *
from dbo.udf_MyFunction();

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

于 2013-07-29T14:44:11.633 回答
0

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

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

但是,我不建议在生产中这样做,考虑将存储过程更改为用户定义的函数

于 2013-07-29T14:44:48.637 回答