2010-10-30 5 views
2

Lorsque nous créons une procédure stockée, nous créons propably une variable comme ceci:Quand et comment SQL Server supprime les variables de la mémoire dans les procédures stockées?

DECLARE @UserCount INT 

Nous utilisons cette variable dans la procédure stockée. Mais nous ne disposons pas de cette variable à la fin de la procédure stockée. Nous disposons des curseurs avec DEALLOCATE mais nous n'écrivons pas de lignes de fourmis pour les variables que nous créons.

Une autre stuation est que nous créons des tables et nous les nommons « @table »

Quand et comment Sql Server aliène ce genre de variables?

Répondre

2

Par MSDN:

« La portée d'une variable est la gamme d'instructions Transact-SQL qui peut faire référence la variable La portée d'une variable dure du point il est déclaré jusqu'à la fin du lot ou. procédure stockée dans laquelle elle est déclarée. "

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

Sur une note de côté - vous pouvez voir quelques différences de performances très intéressantes entre les tables temporaires (#MyTable) et les variables de table (@MyTable). Si nous profilons un sproc et voyons des problèmes de performance dans l'utilisation de notre variable de table, nous l'essayerons avec une table temporaire à la place pour voir si cela peut améliorer les performances.

1

Ajout à la réponse de Bob ci-dessus, en ce qui concerne spécifiquement le point

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

MSDN états et je cite:

Une variable de curseur ne doit pas être explicitement désallouée. La variable est implicitement désallouée quand il est hors de portée

Ceci est applicable atleast aussi loin que SQL Server 2000

Questions connexes