0

我有一个 sproc,我无法修改它的签名,它的最后一行有一个 SELECT 语句:

SELECT userid = @userid

其中@userid 在存储过程中声明(未传入)。有没有办法在 sproc 之外的变量中捕获 userid 的值?

如果我想通过修改最后一行来捕获两个值:

SELECT userid = @userid, somevar = @somevar

这会影响正在使用此存储过程的任何现有代码路径(例如在 .NET 中进行的调用)吗?如果不是,我如何捕获存储过程之外的两个值?

这些捕获都将在 SQL 中完成,而不是应用程序语言。

4

1 回答 1

2

像这样执行 SELECT 的存储过程实际上并不是发回返回值,而是发回一个结果集。在 SQL 中捕获它的一种方法是将结果插入到临时表中。

CREATE TABLE #MyTemp 
  (UserId INT, 
  SomeVar VARCHAR(50))

INSERT #MyTemp
  EXEC MySproc

此时您可以从#MyTemp SELECT 到局部变量。

在结果中添加另一列是否会破坏任何现有的应用程序代码确实是一个很大的“取决于”。

于 2013-01-03T22:31:21.167 回答