2016-07-27 2 views
1

Можно ли присвоить значение переменной, передать ее в сохраненный процесс, а затем в сохраненный процесс: 1.) использовать значение, переданное в, 2.) изменить значение, присвоенное переменной, и 3.) передать переменную обратно?Передача переменной в хранимую процедуру SQL ByRef?

Я пытаюсь настроить «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 

Заранее благодарим за любую помощь.

ответ

2

В вызывающем коде вам также понадобится OUT[PUT].

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

КСТАТИ: Что касается вашей заявленной цели там построен в DMVs that can be queried, чтобы получить информацию о длинных заявлениях бегущих уже не нужно изобретать велосипед ...

+0

Угу. тупой ошибка. Я просто никогда не пробовал это раньше и думал, может быть, идея была неправильной. Большое спасибо за быстрый ответ! – JBStovers

+0

Никогда не использовался DMV. Похож на весь мир, который заставит меня разобраться, чтобы понять. Будет ли 'sys.dm_exec_query_stats' тем, кого я ищу? – JBStovers

+0

Да, также 'sys.dm_exec_procedure_stats' для более высокого уровня для каждой статистики процедур. –

Смежные вопросы