Check constraint over meerdere tabellen en colommen

Pagina: 1
Acties:
  • 106 views sinds 30-01-2008
  • Reageer

  • _.Luke._
  • Registratie: September 2001
  • Laatst online: 26-07-2021
Is het mogelijk om in MS SQL Server een check constraint te leggen over meerdere kolommen of tabellen.

Voorbeeld, je wil in de tabel Medewerker bij het invoeren van een medewerkerID ofzo kijken of er reeds een overeenkomstig persoonsID voorkomt in de Persoon tabel met behulp van een check constraint. Kan dit?

Zo nee, hoe kan je dat dan doen, met een Rule???

Trying is the first step towards faillure...


  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 21:19

thomaske

» » » » » »

Wat is precies de bedoeling? Moet er een overeenkomstig record zijn in de persoon tabel of mag dat juist niet?

Als het juist wel moet, dan kan je gewoon gebruik maken van een Foreign Key.
Anders zou je gebruik kunnen maken van een trigger ('before insert on medewerker') maar ik weet niet zeker of dat die bestaan in mssql (die bestaan dus)

[ Voor 12% gewijzigd door thomaske op 12-12-2002 10:14 ]

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • _.Luke._
  • Registratie: September 2001
  • Laatst online: 26-07-2021
jah Insert triggers bestaan wel. Maar is niet de bedoeling. Eigenlijk wil ik gewoon weten wat de mogelijk- en onmogelijkheden van check constraints en rules zijn...

Anders omschreven:
Er wordt van een Rule gezegd dat het over meerdere kolommen en tabellen gezet kan worden. Is dit ook met een check constraint het geval is dan mijn vraag. Dat het over meerdere kolommen binnen een tabel kan weet ik wel maar of ie ook buiten de tabel andere tabellen kan checken is voor mij nog de vraag.
Er worden constant voorbeelden gegeven van bepaalde BETWEEN values in een veld, dat is allemaal duidelijk maar kan een Rule of een Check constraint ook kijken in een andere kolom in een andere tabel of daar een bepaalde waarde in staat en aan de hand daarvan een true of false waarde teruggeven?

Trying is the first step towards faillure...


  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 21:19

thomaske

» » » » » »

Kan je misschien uitleggen waarvoor je het precies nodig hebt?
naar mijn weten kan een CHECK constraint alleen maar de waardes van de tabel zelf checken, wanneer je dus wil checken met data uit een andere tabel, moet je een andere oplossing zoeken.

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • _.Luke._
  • Registratie: September 2001
  • Laatst online: 26-07-2021
Nou we zetten een cursus op en we willen uitleggen wat het voordeel van check constraints t.o.v. rules en vice versa is. Ook willen we eigenlijk precies weten wat er wel en niet mogelijk is met check constraints en rules. Maar op de laatste vraag heb ik volgens mij dus het antwoord al, dat je slechts beperkingen kunt leggen op de in te voeren data. Deze beperkingen staan vast en kunnen niet aan de hand van gegevens uit andere tabellen worden bepaald.

Trying is the first step towards faillure...


  • Oblii
  • Registratie: Februari 2000
  • Niet online

Oblii

Volgens mij kan je prima komplete select queries in je CHECK zetten

But I don't care, I'm in a hurry going nowhere


  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 21:19

thomaske

» » » » » »

Oblii schreef op 12 december 2002 @ 11:06:
Volgens mij kan je prima komplete select queries in je CHECK zetten
Helaas.. toch niet
The condition of a CHECK constraint can refer to any column in the table, but it cannot refer to columns of other tables. CHECK constraint conditions cannot contain the following constructs:

queries to refer to values in other rows
• calls to the functions SYSDATE, UID, USER, or USERENV
• the pseudocolumns CURRVAL, NEXTVAL, LEVEL, or ROWNUM
• date constants that are not fully specified
disclaimer;
komt uit de oracle documentatie, maar denk niet dat deze veel verschilt van mssql

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • jochemd
  • Registratie: November 2000
  • Laatst online: 05-06 20:32
_.Luke._ schreef op 12 december 2002 @ 10:17:

Er wordt van een Rule gezegd dat het over meerdere kolommen en tabellen gezet kan worden.
Door wie? Volgens mij niet door Microsoft.

Verwijderd

Kun je niet een trigger gebruiken?
:X |:(

Lezen is ook een vak. :).

Volgens mijn weten zijn triggers echter de enige optie. Ik heb thuis nog een leuk boek hierover. Ik zal wel even checken wat ze daar er over zeggen.

[ Voor 75% gewijzigd door Verwijderd op 12-12-2002 12:50 ]


  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 21:19

thomaske

» » » » » »

thomaske schreef op 12 december 2002 @ 10:11:
[..]
Anders zou je gebruik kunnen maken van een trigger ('before insert on medewerker')
_.Luke._ schreef op 12 december 2002 @ 10:17:
jah Insert triggers bestaan wel. Maar is niet de bedoeling. Eigenlijk wil ik gewoon weten wat de mogelijk- en onmogelijkheden van check constraints en rules zijn...
Verwijderd schreef op 12 december 2002 @ 12:30:
Kun je niet een trigger gebruiken?
:X ;)

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Verwijderd

Ik heb het nog even nagekeken:
Check constraints kunnen over meerdere kolommen binnen dezelfde tabel maar hebben alleen toegang tot de huidige rij.
Rules worden aangeraden om alleen te gebruiken voor backward compatibility. Rules zijn hetzelfde als CHECK constraints met uitzondering dat ze alleen op 1 kolom toepassing kunnen hebben.
Triggers zijn het meest krachtig (en hebben de grootste performance hit :) ) en kunnen dienen als eigen RI systeem tot simpele data checks.
Pagina: 1