<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>SQL Server</title>
        <link>http://geekswithblogs.net/dnoderer/category/10046.aspx</link>
        <description>Microsoft SQL Server related topics</description>
        <language>en-US</language>
        <copyright>Dave Noderer</copyright>
        <managingEditor>daven@computerways.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>No scoping for SQL Server stored procedures&amp;hellip;</title>
            <link>http://geekswithblogs.net/dnoderer/archive/2009/05/07/no-scoping-for-sql-server-stored-procedureshellip.aspx</link>
            <description>&lt;p&gt;It’s always nice to learn something new…&lt;/p&gt;
&lt;p&gt;Today I learned that variables in SQL Server stored procedures have no scope rules.&lt;/p&gt;
&lt;p&gt;Take this example:&lt;/p&gt;
&lt;p&gt;-- &lt;br /&gt;
Declare @Outer int &lt;br /&gt;
Set @Outer = 1 &lt;/p&gt;
&lt;p&gt;While 1 = 1 &lt;br /&gt;
begin &lt;br /&gt;
    Declare @Inner int &lt;br /&gt;
    Set @Inner = 2 &lt;br /&gt;
    break &lt;br /&gt;
end &lt;br /&gt;
Select @Outer, @Inner&lt;/p&gt;
&lt;p&gt;As a developer I expected that a new “instance” of @Inner would be created on each iteration of the loop and that the ending select would actually get an error saying that there was no variable @Inner.&lt;/p&gt;
&lt;p&gt;But this is not true, all variables have a scope of the batch in which they are declared, code blocks be damned!&lt;/p&gt;
&lt;p&gt;Lesson learned… re-initialized each loop of the procedure and everything works as expected.&lt;/p&gt;
&lt;p&gt;Embarrassing as I’ve been writing stored procedures for 15 years…&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=131877"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=131877" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/dnoderer/aggbug/131877.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dave Noderer</dc:creator>
            <guid>http://geekswithblogs.net/dnoderer/archive/2009/05/07/no-scoping-for-sql-server-stored-procedureshellip.aspx</guid>
            <pubDate>Thu, 07 May 2009 14:28:19 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/dnoderer/comments/131877.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/dnoderer/archive/2009/05/07/no-scoping-for-sql-server-stored-procedureshellip.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/dnoderer/comments/commentRss/131877.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/dnoderer/services/trackbacks/131877.aspx</trackback:ping>
        </item>
    </channel>
</rss>