CTE – Common Table Expressions Issue


Rendte ind i et mindre, ikke så vel dokumenteret, problem i dag da jeg ville anvende Common Table Expressions (CTE) i et T-SQL testscript.

Min konstruktion var som følger:

DECLARE @Count AS INT 
WITH
EmployeesWithSameBirthDate ( ID, [Count] ) AS
(
SELECT
dbo.HumanResources.Employee.EmployeeID
, COUNT( dbo.HumanResources.Employee.BirthDate ) AS [Count]
FROM dbo.HumanResources.Employee 
GROUP BY dbo.HumanResources.Employee.EmployeeID 
HAVING COUNT( dbo.HumanResources.Employee.BirthDate ) > 1
)

SET
@Count = ( SELECT COUNT( 0 ) FROM EmployeesWithSameBirthDate )
IF ( @Count > 0 )
BEGIN
–Bla bla bla
END
ELSE
BEGIN
–Bla bla bla
END

Problemet er, at man kun kan kalde CRUD’s direkte efter CTE’en er oprettet, og dermed ikke ‘SET @Count = …’

Løsningen i denne situation er at erstatte linien hvor @Count bliver assignet med følgende statement:

SELECT @Count  = COUNT( 0 ) FROM EmployeesWithSameBirthDate

Reklamer

Skriv et svar

Udfyld dine oplysninger nedenfor eller klik på et ikon for at logge ind:

WordPress.com Logo

Du kommenterer med din WordPress.com konto. Log Out / Skift )

Twitter picture

Du kommenterer med din Twitter konto. Log Out / Skift )

Facebook photo

Du kommenterer med din Facebook konto. Log Out / Skift )

Google+ photo

Du kommenterer med din Google+ konto. Log Out / Skift )

Connecting to %s

%d bloggers like this: