Restored database konflikter med et opdaterings deploy fra VS DB Ed.

Jeg løb ind i et lidt filøjerligt issue her til aftens da jeg skulle lave et opdateringsdeploy fra VS ud til min dev instans af en database.
Jeg havde modtaget en backup fra en kollega, der indeholdt en masse testdata, som jeg restorede ind og overskrev den eksisterende instans jeg havde på min maskine.
Efterfølgende fik jeg kørt en del af de tests jeg skulle, men undervejs kom der opdateringer til skemaet. Da jeg så ville opdatere min instans modtog jeg følgende besked fra VS:

The database owner SID recorded in the master database differs from the database owner SID recorded in database…

For at gøre en lang historie kort googlede jeg en løsning, og for at jeg ikke selv skal glemme den så let, poster jeg den her:
use mydb
go
EXEC dbo.sp_changedbowner @loginame = N’sa’, @map = false

Loading

Julian Date og supplementsmånede

Jeg sad og skimmede nettet for smarte tricks til en tidsdimension i et datawarehouse.
Jeg faldt over følgende indlæg: http://dylanwan.wordpress.com/data-warehouse-design/design-tip-1-key-for-the-date-dimension/ og fandt det egentlig meget interessant, lige indtil jeg stødte ind i kravet: supplementsmånede. Jeg kan ikke rigtig se, at man kan løse dette krav med en konvertering af date til julian hvor man samtidig håndterer den 13. månede eller?

Loading

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

Loading