SELECT-EXEC的Microsoft Connect条目在哪里?

时间:2010-11-09 22:03:40

标签: sql-server sql-server-2008 sql-server-2000

有人能指出我SELECT-EXEC错误的Connect suggention条目,所以我可以赞成它吗?


已经10年了,我仍在诅咒SQL Server不允许SELECT-EXEC语法,例如:

SELECT * FROM (
   EXECUTE GetKnownTerroristList @StartDate='2010-01-01', @EndDate='2010-11-01'
)

CREATE PROCEDURE dbo.GetTransactionsByLCT @LCTGUID uniqueidentifier AS

   SELECT * FROM Transactions
   WHERE LCTGUID = @LCTGUID

   UNION ALL

   EXECUTE DATACENTER.Accounts.dbo.GetTransactionsByLCT @LCTGUID = @LCTGUID

示例3 - 现实问题

CREATE PROCEDURE dbo.GetTransactionsByLCT @LCTGUID uniqueidentifier AS

   EXECUTE GetTranasctionsByLCT_90 @LCTGUID = @LCTGUID

   UNION ALL

   EXECUTE DATACENTER.Accounts.dbo.GetTransactionsByLCT @LCTGUID = @LCTGUID

Erland Sommarskoga well-known page of suggested alternatives;但它们都不是正确的解决方法(即它们无法复制所需的功能)。

我知道必须是专门针对此问题的Microsoft Connect条目;因为成千上万的人遇到过它。但是my searches of Connect come up empty

有人能指出我SELECT-EXEC错误的Connect suggention条目,所以我可以赞成它吗?


编辑:Erland的解决方法摘要:

  • Using OUTPUT Parameters - 一般不适用,但有时会被忽视。
  • Table-valued Functions - 可能是输出的最佳方法,但有一些限制。
  • Using a Table - 大多数通用方法没有限制,但使用起来有点复杂。
  • INSERT-EXEC - 不需要重写。有一些陷阱。
  • Table Parameters and Table Types - 可能是最终的答案,但由于受到限制,它在这方面只是略微有用。 (SQL 2008)
  • Using the CLR - 不需要重写。 Clunky,但是当INSERT-EXEC不起作用时作为最后的手段是有用的。 (SQL 2005)
  • OPENQUERY - 不需要重写。棘手的,有许多陷阱。
  • Using XML - 一种需要你进行重写的迂回方式,但它比其他方法有一些优势。 (SQL 2005)
  • Using Cursor Variables - 不值得推荐。

2 个答案:

答案 0 :(得分:3)

This是我能找到的最接近的人。

答案 1 :(得分:1)

为什么不使用Table-Valued Functions