2013-01-03 131 views
0

我有一个存储过程,这是我不能修改的签名,具有SELECT语句作为其最后一行:如何捕获sproc的返回值?

SELECT userid = @userid 

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

如果我想通过修改的最后一行捕捉到两个值:

SELECT userid = @userid, somevar = @somevar 

会影响正在使用这个存储过程(电话说在.NET平台上制造)的任何现有的代码路径?如果不是,我如何捕获sproc之外的两个值?

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

+0

我错过了这里的东西,你的.net代码是用这个做的。从proc返回,ExecuteScalar? –

+0

请参阅[如何选择* INTO临时表存储过程](http://stackoverflow.com/questions/653714/how-to-select-into-temp-table-from-stored-procedure) –

回答

2

这样做一个SELECT的存储过程实际上并未返回返回值,它将发送一个结果集。捕获SQL中的一种方法是将结果插入临时表中。

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

INSERT #MyTemp 
    EXEC MySproc 

此时,您可以从#MyTemp中选择本地变量。

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

相关问题