Utvecklingstips

SQL-tilldelning av variabel med select utan resultat

När man använder en selectfråga för att sätta värden på variabler så finns en fallgrop man får se upp med!

När frågan inte returnerar nån rad så behåller variabeln sitt värde och sätts inte till null vilket man skulle kunna tro utan den ignorerar helt resultatet och gör ingen tilldelning alls.

Exempel 1:

declare @match float
SELECT @match = mv_matchvalue FROM match_values WHERE 1=2
select @match

@match innehåller null som förväntat eftersom det inte finns några såna rader.

Exempel 2:

declare @match float
SET @match = 2
SELECT @match = mv_matchvalue FROM match_values WHERE 1=2
select @match

@match innehåller 2 och och inte null, d.v.s. den tilldelas inte alls.

Utan stöd av den utmärkta debugfunktionen som finns i SQL Server 2008 så hade jag nog felsökt detta fenomen flera timmar!

Andra bloggar om: 
 
Tommy Söderström

2009-06-04 kl. 16:08

Web Analytics