1

在 TSQLT 中,我试图从存储过程返回一个结果并将其添加到一个变量中,以便我可以断言它是否与我的预期结果匹配。

我已经看到了大量从函数返回结果的示例,但没有看到调用存储过程的示例。

有没有人可以分享的例子?

提前致谢

4

3 回答 3

1

如果要从存储过程中取回变量,一种方法是使用 out 参数

CREATE PROC MyTest
(@myVar int output)
AS
BEGIN
  SET @myVar = 10
END
GO
DECLARE @x int
EXEC MyTest @myVar=@x output
SELECT @x

如果您从存储过程中获取结果集,这里有一个来自我编写的 tSQLt 测试的示例。我没有打扰整个测试,因为这应该可以满足您的需求。

    CREATE TABLE #Actual (SortOrder int identity(1,1),LastName varchar(100), FirstName varchar(100), OrderDate datetime, TotalQuantity int) 
    -- Act  
    INSERT #Actual (LastName, FirstName, OrderDate, TotalQuantity)
    EXEC Report_BulkBuyers @CurrentDate=@CurrentDate    

这里的诀窍是您必须首先创建#actual 表。它应该包含与从存储过程返回的相同的列。

顺便说一句,您可能已经注意到我在 #actual 表中有一个 SortOrder 列。这是因为我对测试此特定报告返回的数据的顺序感兴趣。EXEC tSQLt.AssertEqualsTable 将匹配类似 for like 的行,但不匹配行在预期和实际中出现的顺序,因此确保顺序的方法是向两者都添加 SortOrder 列(这是一个标识列) #expected 和 #actual

于 2013-10-10T11:58:18.537 回答
0

看看这里: http ://technet.microsoft.com/en-us/library/ms188655.aspx

很多关于从存储过程返回值的例子。在页面底部还有一个关于评估返回码的示例。

于 2013-10-09T11:55:10.810 回答
0

它实际上非常简单。

declare @variable int
exec @variable = _Stored_Procedure
于 2013-10-09T13:07:50.170 回答