是否可以为变量赋值,将其传递给存储过程,然后在存储过程中: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
提前感谢您的帮助。
答案 0 :(得分:2)
您在调用代码中也需要OUT[PUT]
。
EXEC dbo.usp_TIME_HACK_TEST
@TITLE = 'Test Run',
@START_TIME = @T OUTPUT
BTW:关于你声明的目标,内置DMV that can be queried以获取有关长时间运行的语句的信息,无需重新发明轮子......