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