我有一个接受两个参数的存储过程。我可以在Server Management Studio中成功地执行它。它显示了我所期望的结果。但是它也返回了一个返回值。
它增加了这一行,
SELECT 'Return Value' = @return_value
我希望存储过程返回它在结果中显示的表,而不是返回值,因为我从MATLAB调用此存储过程,它返回的所有值都是true或false。
我需要在我的存储过程中指定它应该返回什么吗?如果需要,我如何指定一个4列的表(varchar(10),float,float,float)?
9条答案
按热度按时间krcsximq1#
一个过程不能返回这样的表。但是你可以从一个过程中的表中选择一个,并将它定向到一个表(或表变量)中,如下所示:
cx6n0qe32#
我经常使用表类型来确保一致性和简化代码。从技术上讲,你不能返回“一个表”,但是你可以返回一个结果集,使用
INSERT INTO .. EXEC ...
语法,你可以清楚地调用一个PROC并将结果存储到一个表类型中。在下面的例子中,我实际上是将一个表和另一个参数沿着传递到一个PROC中。那么我实际上是在“返回一个表”,然后可以将其作为表变量使用。7y4bm7vi3#
考虑创建一个可以返回表并在查询中使用的函数。
https://msdn.microsoft.com/en-us/library/ms186755.aspx
函数和过程的主要区别在于函数不改变任何表,它只返回一个值。
在本例中,我创建了一个查询,以给予给定表中所有非空列的计数。
可能有很多方法可以解决这个问题,但它很好地说明了一个函数。
然后使用执行函数
生成许多行,如:
a5g8bdjr4#
如果既需要结果集又需要返回值,则可以使用out参数代替返回值
91zkwejq5#
我遇到过类似的情况,通过在过程中使用临时表解决了这个问题,原始存储过程返回了相同的字段:
nc1teljy6#
存储过程返回的状态值只能是INT数据类型。不能在RETURN语句中返回其他数据类型。
从Lesson 2: Designing Stored Procedures开始:
每个存储过程都可以返回一个整数值,称为执行状态值或返回代码。
如果您仍然希望从SP返回一个表,那么您必须在SP内处理SELECT返回的记录集,或者绑定到一个传递XML数据类型的OUTPUT变量。
嘿,
约翰
1rhkuytd7#
虽然这个问题已经很老了,但作为一个软件开发的新手,我不能停止自己分享我所学到的:
创建存储过程:
执行存储过程:
(If您要测试SQL中存储过程的执行情况)
输出:
hvvq6cgz8#
插入到@T exec [master].dbo.sp_executesql @q从@data提取下一个到@c,@b结束关闭@数据释放@数据选择 * 从@T返回结束
dvtswwa39#
这里有一个SP的例子,它同时返回一个表和一个返回值。我不知道你是否需要返回“返回值”,我也不知道MATLAB和它需要什么。