Delen via


REGEL MAKEN (Transact-SQL)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAnalytics Platform System (PDW)

Hiermee maakt u een object met de naam een regel. Wanneer deze is gebonden aan een kolom of een aliasgegevenstype, geeft een regel de acceptabele waarden op die in die kolom kunnen worden ingevoegd.

Belangrijk

Deze functie wordt verwijderd in een toekomstige versie van SQL Server. Vermijd het gebruik van deze functie in nieuwe ontwikkelwerkzaamheden en plan om toepassingen te wijzigen die momenteel gebruikmaken van deze functie. U wordt aangeraden in plaats daarvan controlebeperkingen te gebruiken. Controlebeperkingen worden gemaakt met behulp van het trefwoord CHECK van CREATE TABLE of ALTER TABLE. Voor meer informatie, zie Unieke Beperkingen en Controlebeperkingen.

Een gegevenstype voor een kolom of alias kan slechts één regel bevatten die eraan is gebonden. Aan een kolom kunnen echter zowel een regel als een of meer controlebeperkingen zijn gekoppeld. Als dit waar is, worden alle beperkingen geëvalueerd.

Transact-SQL syntaxis-conventies

Syntaxis

CREATE RULE [ schema_name . ] rule_name   
AS condition_expression  
[ ; ]  

Argumenten

schema_name
Is de naam van het schema waartoe de regel behoort.

rule_name
Is de naam van de nieuwe regel. Regelnamen moeten voldoen aan de regels voor id's. Het opgeven van de naam van de regeleigenaar is optioneel.

condition_expression
Is de voorwaarde of voorwaarden die de regel definiëren. Een regel kan elke expressie zijn die geldig is in een WHERE-component en kan elementen bevatten, zoals rekenkundige operatoren, relationele operatoren en predicaten (bijvoorbeeld IN, LIKE, BETWEEN). Een regel kan niet verwijzen naar kolommen of andere databaseobjecten. Ingebouwde functies die niet verwijzen naar databaseobjecten, kunnen worden opgenomen. Door de gebruiker gedefinieerde functies kunnen niet worden gebruikt.

condition_expression bevat één variabele. Het at-teken (@) gaat vooraf aan elke lokale variabele. De expressie verwijst naar de waarde die is ingevoerd met de instructie UPDATE of INSERT. Elke naam of elk symbool kan worden gebruikt om de waarde te vertegenwoordigen bij het maken van de regel, maar het eerste teken moet het at-teken (@).

Opmerking

Vermijd het maken van regels voor expressies die gebruikmaken van aliasgegevenstypen. Hoewel regels kunnen worden gemaakt voor expressies die gebruikmaken van aliasgegevenstypen, kunnen de expressies na het koppelen van de regels aan kolommen of aliasgegevenstypen niet worden gecompileerd wanneer ernaar wordt verwezen.

Opmerkingen

CREATE RULE kan niet worden gecombineerd met andere Transact-SQL-instructies in één batch. Regels zijn niet van toepassing op gegevens die al bestaan in de database op het moment dat de regels worden gemaakt en regels kunnen niet worden gebonden aan systeemgegevenstypen.

Er kan alleen een regel worden gemaakt in de huidige database. Nadat u een regel hebt gemaakt, voert u sp_bindrule uit om de regel te binden aan een kolom of een aliasgegevenstype. Een regel moet compatibel zijn met het kolomgegevenstype. '@value LIKE A%' kan bijvoorbeeld niet worden gebruikt als regel voor een numerieke kolom. Een regel kan niet worden gebonden aan een tekst, ntext, afbeelding, varchar(max), nvarchar(max), varbinary(max), xml, CLR door de gebruiker gedefinieerde type of tijdstempelkolom . Een regel kan niet worden gebonden aan een berekende kolom.

Plaats de teken- en datumconstanten tussen enkele aanhalingstekens (') en plaats binaire constanten met 0x. Als de regel niet compatibel is met de kolom waaraan deze is gebonden, retourneert de SQL Server Database Engine een foutbericht wanneer een waarde wordt ingevoegd, maar niet wanneer de regel afhankelijk is.

Een regel die is gebonden aan een aliasgegevenstype wordt alleen geactiveerd wanneer u probeert een waarde in te voegen in of bij te werken, een databasekolom van het aliasgegevenstype. Omdat regels geen variabelen testen, wijst u geen waarde toe aan een aliasgegevenstypevariabele die wordt geweigerd door een regel die is gebonden aan een kolom van hetzelfde gegevenstype.

Gebruik sp_help om een rapport over een regel op te halen. Als u de tekst van een regel wilt weergeven, voert u sp_helptext uit met de regelnaam als parameter. Als u de naam van een regel wilt wijzigen, gebruikt u sp_rename.

Een regel moet worden verwijderd door DROP RULE te gebruiken voordat een nieuwe regel met dezelfde naam wordt gemaakt en de regel moet niet-afhankelijk zijn met behulp van sp_unbindrule voordat deze wordt verwijderd. Gebruik sp_unbindrule om een regel uit een kolom los te koppelen.

U kunt een nieuwe regel koppelen aan een kolom of gegevenstype zonder de vorige te koppelen; de nieuwe regel overschrijft de vorige regel. Regels die afhankelijk zijn van kolommen hebben altijd voorrang op regels die zijn gebonden aan aliasgegevenstypen. Als u een regel aan een kolom bindt, wordt een regel vervangen die al is gebonden aan het gegevenstype alias van die kolom. Maar het binden van een regel aan een gegevenstype vervangt geen regel die is gebonden aan een kolom van dat aliasgegevenstype. In de volgende tabel ziet u de prioriteit die van kracht is wanneer regels zijn gebonden aan kolommen en aan aliasgegevenstypen waarop al regels bestaan.

Nieuwe regel gebonden aan Oude regel gebonden aan

aliasgegevenstype
Oude regel gebonden aan

Rubriek
Aliasgegevenstype Oude regel vervangen Geen wijziging
Rubriek Oude regel vervangen Oude regel vervangen

Als aan een kolom zowel een standaard als een regel is gekoppeld, moet de standaardwaarde vallen binnen het domein dat is gedefinieerd door de regel. Een standaardwaarde die strijdig is met een regel, wordt nooit ingevoegd. De SQL Server Database Engine genereert telkens wanneer deze een dergelijke standaardwaarde probeert in te voegen een foutbericht.

Machtigingen

Als u CREATE RULE minimaal wilt uitvoeren, moet een gebruiker de machtiging CREATE RULE hebben in de huidige database en de machtiging ALTER voor het schema waarin de regel wordt gemaakt.

Voorbeelden

Eén. Een regel maken met een bereik

In het volgende voorbeeld wordt een regel gemaakt waarmee het bereik van gehele getallen wordt beperkt dat is ingevoegd in de kolom of kolommen waaraan deze regel is gebonden.

CREATE RULE range_rule  
AS   
@range>= $1000 AND @range <$20000;  

B. Een regel maken met een lijst

In het volgende voorbeeld wordt een regel gemaakt waarmee de werkelijke waarden die zijn ingevoerd in de kolom of kolommen (waaraan deze regel is gebonden) worden beperkt tot alleen de waarden die in de regel worden vermeld.

CREATE RULE list_rule  
AS   
@list IN ('1389', '0736', '0877');  

C. Een regel maken met een patroon

In het volgende voorbeeld wordt een regel gemaakt om een patroon te volgen van twee tekens gevolgd door een afbreekstreepje (-), een willekeurig aantal tekens of geen tekens, en eindigt met een geheel getal van 0 tot en 9met een geheel getal.

CREATE RULE pattern_rule   
AS  
@value LIKE '__-%[0-9]'  

Zie ook

ALTER TABLE (Transact-SQL)
STANDAARD MAKEN (Transact-SQL)
MAAK TABEL AAN (Transact-SQL)
DROP DEFAULT (Transact-SQL)
DROP RULE (Transact-SQL)
expressies (Transact-SQL)
sp_bindrule (Transact-SQL)
sp_help (Transact-SQL)
sp_helptext (Transact-SQL)
sp_rename (Transact-SQL)
sp_unbindrule (Transact-SQL)
WHERE (Transact-SQL)