Avatar billede davidfossil Nybegynder
19. august 2005 - 11:07 Der er 9 kommentarer og
1 løsning

Unique contraint og null værdier

Kan det lade sig gøre at have en kolonne med en eller anden form for "uniqueness" (index eller contraint), hvor det dog er tilladt at have NULL-værdier ved flere rækker? Dvs. der må højest stå 'fisk' i én række, men der må gerne stå NULL mange steder...
Avatar billede bromer Nybegynder
19. august 2005 - 11:10 #1
Du kan lave det med en CHECK contraint, hvor du checker at værdien er NULL eller ikke tilstede?
Avatar billede fsconsult.dk Nybegynder
19. august 2005 - 11:15 #2
mener nu godt du kan have en UNIQUE constraint hvor der er NULLS ALLOWED ..  og der så kun bliver checket på at forekomster != null skal være unikke! 
det må dog komme an på en test...
Avatar billede davidfossil Nybegynder
19. august 2005 - 11:22 #3
bromer > Kan jeg lokke dig til at give et eksempel?

fsconsult.dk > Det tror jeg desværre ikke ... kan i hvert fald ikke finde ud af hvordan :(
Avatar billede bromer Nybegynder
19. august 2005 - 11:23 #4
fsconsult.dk> Det ville umiddelbart være smart, men jeg synes ikek at kunne se det nogle steder på http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_create2_8g9x.asp.
Avatar billede bromer Nybegynder
19. august 2005 - 11:24 #5
davidfossil> Jeg har desværre ikke en MS SQL ved mig, men derfor vil jeg da gerne prøve

hvad med

CHECK (cname IS NULL OR (SELECT COUNT(1) FROM tablename WHERE columnname = cname) = 0)

noget i den stil hvad jeg tænkt mig.
Avatar billede davidfossil Nybegynder
19. august 2005 - 11:27 #6
"ODBC error: [Microsoft][ODBC SQL Server Driver][SQL Server]Subqueries are not supported in CHECK constraints, table 'dbo.tblPersons'."

:o(
Avatar billede bromer Nybegynder
19. august 2005 - 11:31 #7
Okay, det er rimelig svært at debugge SQL når man ikke har en SQL Server at gøre det mod. Du kan fjerne parenteserne omkring query'en så det ikke længere er en subquery, men det burde være muligt at debugge sig frem til noget brugbart.
Avatar billede davidfossil Nybegynder
19. august 2005 - 11:40 #8
Jeg tror jeg har fundet en løsning, har dog ikke testet det endnu. Ifølge hvad jeg kan læse mig til, er det muligt at kalde en user defined function fra en check constraint, og på den måde omgå reglen med subqueries...

Smid et svar bromer - hvis det her virker er det dig der hjalp mig på vej :)
Avatar billede bromer Nybegynder
19. august 2005 - 11:51 #9
Okay... tænkte også på en SP, men troede at man kunne gøre det pænere.
Avatar billede davidfossil Nybegynder
19. august 2005 - 12:00 #10
Virker præcis som ønsket med en UDF - en SP ville nok også kunne gøre det, den er bare lidt mere "kikset" at kalde fra T-SQL (IMHO)...

Tak for hjælpen :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester