Posts Tagged ‘SQL’

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

Kør SQL statement mod alle databaser

Der findes en udokumenteret system stored procedure fra Microsoft, der gør det muligt at eksekvere en T-SQL sætning mod alle databaser. Uden at skulle sætte en cursor op mod sysdatabases tabellen.

Syntax:
EXEC sp_MSforeachdb @command
(hvor @command er en streng af variabel længde)

Eksempel:
Dette eksempel returnerer en liste med alle tabeller i alle datasbase på en given SQL-Server instans
DECLARE @command varchar(1000)
SELECT @command = ‘USE ? SELECT name FROM sysobjects WHERE xtype = ”U” ORDER BY name’
EXEC sp_MSforeachdb @command

Se i øvrigt:
http://www.mssqltips.com/tip.asp?tip=1414

” == 0

Opdagede i dag en meget underlig måde at programmere på. Under en portering fra SQL Server 2000 til SQL Server 2005 stødte jeg på en fejlbesked i en stored procedure. Fejlbeskeden lød meget mærkelig og det viste sig også at det ikke var den helt rigtige besked der blev vist. Af meget uforklarlige årsager havde 3. parts udviklere forkærlighed for at benytte sig af notationen som følger:

SELECT CAST( '' AS INT(4) ) AS Test

Det går godt i SQL Server 2000, og der returneres et 0. Det gør det bare ikke i SQL Server 2005, her knækker den nakken på udtrykket.

Det jeg ikke lige begriber er, hvordan man kommer konstruktionen, at en tom streng selvfølgelig kan cast’es til 0 (nul). Det giver da ingen mening?

Kontinuerlig liste af datoer i SQL Server 2005

Vil lige henlede interesserede på denne blog hvor der er et ret nyttigt SQL-script til at generere en kontinuerlig liste af datoer. Med andre ord en periodetabel.

    1 with mycte as

    2 (

    3     select cast(‘1900-01-01’ as datetime) DateValue

    4     union all

    5     select DateValue + 1

    6     from    mycte   

    7     where   DateValue + 1 < ‘2050-12-31’

    8 )

    9 select DateValue

   10 from    mycte

   11 OPTION (MAXRECURSION 0)