Определите, сколько циклов запущено для хранимой процедуры

#sql-server #sql-server-2008 #sql-server-2008-r2

#sql-сервер #sql-server-2008 #sql-server-2008-r2

Вопрос:

Я создал небольшую сложную хранимую процедуру на SQL Server 2008 R2, и этот SP также содержит некоторые пользовательские функции. В этих UDF и в самом SP есть несколько циклов while внутри них.

Я хотел бы определить, сколько раз что-то было зациклено, когда я вызываю этот SP.

Какие-либо изменения я могу это сделать?

Комментарии:

1. Конечно, просто поместив переменную с областью действия для всей функции в часть цикла и увеличивая ее на единицу каждый раз. Затем прочитайте значение в конце процедуры?

2. @Widor Я в основном ищу автоматическое решение. Я надеялся, что, возможно, в SQL Profiler есть что-то, что позволяет это сделать.

Ответ №1:

У SQL Profiler нет никакого способа сделать это, насколько я знаю. Что я бы сделал, так это создал временную таблицу (при условии, что вас интересует только количество итераций для одного соединения) для увеличения одной переменной count, а затем вы можете вывести значение, которое хранится в этой временной таблице в конце цикла.

Что-то вроде:

 create table #countTable
(
    id int not null,
    countvar int not null
)
go

insert into #countTable
select 1, 0
go

-- your stored proc call here
--   during your iterations at the end, call this:
update #countTable
set countvar = countvar   1
where id = 1
go

-- ...your stored proc ends now you want the count
select countvar
from #countTable
where id = 1
go
 

Я создал id поле на случай, если вам может понадобиться более одного «счетчика».