Unit testing 在SQLServer中测试存储过程
我编写了一个存储过程来测试另一个存储过程,方法是传递不同的参数,并将执行该过程所花费的计数和时间存储在temp表中。程序比函数好吗Unit testing 在SQLServer中测试存储过程,unit-testing,testing,sql-server-2012,Unit Testing,Testing,Sql Server 2012,我编写了一个存储过程来测试另一个存储过程,方法是传递不同的参数,并将执行该过程所花费的计数和时间存储在temp表中。程序比函数好吗 CREATE PROCEDURE [dbo].[SPTEST_NEW] AS BEGIN DECLARE @COUNT INT; DECLARE @STARTDATETIME DATETIME; DECLARE @ENDDATETIME DATETIME; DECLARE @TimeDiff NVARCHAR(50); D
CREATE PROCEDURE [dbo].[SPTEST_NEW]
AS
BEGIN
DECLARE @COUNT INT;
DECLARE @STARTDATETIME DATETIME;
DECLARE @ENDDATETIME DATETIME;
DECLARE @TimeDiff NVARCHAR(50);
DECLARE @SPNAME VARCHAR(50);
DECLARE @Result TABLE
(
Cases NVARCHAR(100),
RecordCount INT,
ExecutionTime NVARCHAR(50)
)
DECLARE @Search TABLE
(
ID NVARCHAR(50),
NAME NVARCHAR(200),
FMT NVARCHAR(100)
)
SET @SPNAME = 'dbo.[SEARCH_VALUE]';
SET @STARTDATETIME = GETDATE();
--Case#1: Search by All
INSERT INTO @Search
EXEC @SPNAME @PRODUCTID = NULL,
@PRODUCTNAME = NULL,
@FORMAT = NULL
SET @ENDDATETIME = GETDATE();
SELECT @COUNT= @@ROWCOUNT
SET @TimeDiff = CONVERT(TIME, @ENDDATETIME - @STARTDATETIME);
INSERT INTO @Result
VALUES ('ALL', @COUNT, @TimeDiff)
-- Case#2 : Search by Product-ID
INSERT INTO @Search
EXEC @SPNAME
@PRODUCTID = 'ABPROD-BLACK',
@PRODUCTNAME = NULL,
@FORMAT = NULL,
SET @ENDDATETIME = GETDATE();
SELECT @COUNT = @@ROWCOUNT
SET @TimeDiff = CONVERT(TIME, @ENDDATETIME - @STARTDATETIME);
INSERT INTO @Result
VALUES ('PROD-ID:ABPROD-BLACK', @COUNT, @TimeDiff)
--Case#3 : Search by FORMAT
INSERT INTO @Search
EXEC @SPNAME
@PRODUCTID = NULL,
@PRODUCTNAME = NULL,
@FORMAT = 'SCHT',
SET @ENDDATETIME = GETDATE();
SELECT @COUNT= @@ROWCOUNT
SET @TimeDiff = CONVERT(TIME, @ENDDATETIME - @STARTDATETIME);
INSERT INTO @Result
VALUES ('Format:SCHT', @COUNT, @TimeDiff)
SELECT *
FROM @Result
END
这个方法正确吗?还是其他方法?请推荐该方法。如果您确实想要良好的时间测量-不要使用DATETIME
-它的精度仅为3.33ms。使用精确到100ns的TIME(7)
(或DATETIME2(7)
),您应该定义“更好”,它们有两个不同的用途。函数基本上是一个带有参数的视图,可以慢一些,但可以在连接中使用。存储过程可以使用可重用的执行计划进行编译,这将在很多情况下产生更好的性能。