Когда и как SQL Server удаляет переменные из памяти в хранимых процедурах? - PullRequest
4 голосов
/ 30 октября 2010

Когда мы создаем хранимую процедуру, вероятно, мы создаем некоторую переменную, подобную этой:

DECLARE @UserCount INT

Мы используем эту переменную в хранимой процедуре.Но мы не располагаем эту переменную в конце хранимой процедуры.Мы располагаем курсоры с помощью DEALLOCATE, но не пишем муравьиные строки для переменных, которые мы создаем.

Еще одна поза: мы создаем таблицы и называем их "@table"

Когда и как Sql Serverрасполагает такими переменными?

Ответы [ 2 ]

3 голосов
/ 30 октября 2010

Для MSDN:

"Область действия переменной - это диапазон операторов Transact-SQL, которые могут ссылаться на переменную. Область действия переменной продолжается с момента ее объявления до конца пакетаили хранимая процедура, в которой он объявлен. "

http://msdn.microsoft.com/en-us/library/ms187953.aspx

Примечание: вы можете увидеть очень интересные различия в производительности между временными таблицами (#MyTable) и табличными переменными (@MyTable).Если мы профилируем sproc и видим проблемы с производительностью при использовании нашей табличной переменной, вместо этого мы попробуем ее с временной таблицей, чтобы посмотреть, может ли это помочь повысить производительность.

1 голос
/ 30 октября 2010

Добавление к ответу Боба, приведенному выше, в частности о точках

We dispose Cursors with DEALLOCATE but we don't write ant lines for variables

MSDN , и я цитирую:

Переменная курсора не должнабыть явно освобождены.Переменная неявно освобождается, когда выходит из области действия

Это применимо по крайней мере еще до SQL Server 2000

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...