将变量传递给SQL存储过程ByRef?

时间:2016-07-27 16:41:14

标签: sql-server stored-procedures

是否可以为变量赋值,将其传递给存储过程,然后在存储过程中:1。)使用传入的值,2。)更改分配给变量的值,以及3 。)将变量传回去?

我正在尝试设置一个“Time Hack”,我可以在整个过程中穿插,以检查哪些语句运行缓慢。下面是程序示例和调用它。

CREATE PROC [dbo].[usp_TIME_HACK_TEST]
    @TITLE VARCHAR(255),
    @START_TIME DATETIME OUT
AS
BEGIN
    PRINT @TITLE + ': ' + RIGHT(CONVERT(VARCHAR(50),GETDATE() - @START_TIME,13),12)
    SET @START_TIME = GETDATE()
END
GO

DECLARE @x int = 0
DECLARE @T DATETIME = GETDATE()
Print '@T Value at Beginning: ' + convert(VARCHAR(50),@T,21)
WHILE @x < 1000000
    SET @x += 1
EXEC usp_TIME_HACK_TEST
    @TITLE = 'Test Run', 
    @START_TIME = @T
Print '@T Value at End: ' + convert(VARCHAR(50),@T,21)

这是结果的样子。看起来@START_TIME被视为输入变量,并且该过程未更改@T的值。如果将变量声明为输出变量,为什么会发生这种情况?

@T Value at Beginning: 2016-07-27 11:21:19.720
Test Run: 00:00:00:607
@T Value at End: 2016-07-27 11:21:19.720

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您在调用代码中也需要OUT[PUT]

EXEC dbo.usp_TIME_HACK_TEST
    @TITLE = 'Test Run', 
    @START_TIME = @T OUTPUT

BTW:关于你声明的目标,内置DMV that can be queried以获取有关长时间运行的语句的信息,无需重新发明轮子......