Dela via


SKAPA REGEL (Transact-SQL)

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAnalytics Platform System (PDW)

Skapar ett objekt med namnet en regel. När den är bunden till en kolumn eller en aliasdatatyp anger en regel de godtagbara värden som kan infogas i kolumnen.

Viktigt!

Den här funktionen tas bort i en framtida version av SQL Server. Undvik att använda den här funktionen i nytt utvecklingsarbete och planera att ändra program som för närvarande använder den här funktionen. Vi rekommenderar att du använder kontrollbegränsningar i stället. Kontrollera att begränsningar skapas med nyckelordet CHECK i CREATE TABLE eller ALTER TABLE. Mer information finns i unika begränsningar och kontrollbegränsningar.

En kolumn eller en aliasdatatyp kan bara ha en regel som är bunden till den. En kolumn kan dock ha både en regel och en eller flera kontrollbegränsningar associerade med den. När detta är sant utvärderas alla begränsningar.

Transact-SQL syntaxkonventioner

Syntax

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

Argumentpunkter

schema_name
Är namnet på schemat som regeln tillhör.

rule_name
Är namnet på den nya regeln. Regelnamn måste följa reglerna för identifierare. Det är valfritt att ange regelns ägarnamn.

condition_expression
Är det villkor som definierar regeln. En regel kan vara valfritt uttryck som är giltigt i en WHERE-sats och kan innehålla element som aritmetiska operatorer, relationsoperatorer och predikat (till exempel IN, LIKE, BETWEEN). En regel kan inte referera till kolumner eller andra databasobjekt. Inbyggda funktioner som inte refererar till databasobjekt kan inkluderas. Användardefinierade funktioner kan inte användas.

condition_expression innehåller en variabel. Vidtecknet (@) föregår varje lokal variabel. Uttrycket refererar till det värde som anges med instruktionen UPDATE eller INSERT. Alla namn eller symboler kan användas för att representera värdet när regeln skapas, men det första tecknet måste vara vid tecknet (@).

Anmärkning

Undvik att skapa regler för uttryck som använder aliasdatatyper. Även om regler kan skapas för uttryck som använder aliasdatatyper kan uttrycken inte kompileras när de har bindt reglerna till kolumner eller aliasdatatyper när de refereras.

Anmärkningar

CREATE RULE kan inte kombineras med andra Transact-SQL-instruktioner i en enda batch. Regler gäller inte för data som redan finns i databasen när reglerna skapas och regler kan inte bindas till systemdatatyper.

En regel kan bara skapas i den aktuella databasen. När du har skapat en regel kör du sp_bindrule för att binda regeln till en kolumn eller till aliasdatatyp. En regel måste vara kompatibel med kolumndatatypen. Till exempel kan "@value LIKE A%" inte användas som en regel för en numerisk kolumn. En regel kan inte bindas till en text, ntext, bild, varchar(max), nvarchar(max), varbinary(max), xml, CLR-användardefinierad typ eller tidsstämpelkolumn . Det går inte att binda en regel till en beräknad kolumn.

Omslut tecken- och datumkonstanter med enkla citattecken (') och föregå binära konstanter med 0x. Om regeln inte är kompatibel med kolumnen som den är bunden till returnerar SQL Server Database Engine ett felmeddelande när ett värde infogas, men inte när regeln är bunden.

En regel som är bunden till en aliasdatatyp aktiveras endast när du försöker infoga ett värde i eller uppdatera en databaskolumn av aliasdatatypen. Eftersom regler inte testar variabler tilldelar du inte ett värde till en aliasdatatypvariabel som skulle avvisas av en regel som är bunden till en kolumn av samma datatyp.

Om du vill hämta en rapport om en regel använder du sp_help. Om du vill visa texten i en regel kör du sp_helptext med regelnamnet som parameter. Om du vill byta namn på en regel använder du sp_rename.

En regel måste tas bort med hjälp av DROP RULE innan en ny med samma namn skapas och regeln måste vara obundna med hjälp av sp_unbindrule innan den tas bort. Om du vill ta bort en regel från en kolumn använder du sp_unbindrule.

Du kan binda en ny regel till en kolumn eller datatyp utan att koppla bort den föregående. den nya regeln åsidosätter den tidigare regeln. Regler som är bundna till kolumner har alltid företräde framför regler som är bundna till aliasdatatyper. Om du binder en regel till en kolumn ersätts en regel som redan är bunden till aliasdatatypen för kolumnen. Men att binda en regel till en datatyp ersätter inte en regel som är bunden till en kolumn med den aliasdatatypen. I följande tabell visas den prioritet som gäller när regler är bundna till kolumner och till aliasdatatyper där regler redan finns.

Ny regel bunden till Gammal regel bunden till

aliasdatatyp
Gammal regel bunden till

Kolumn
Aliasdatatyp Gammal regel har ersatts Ingen ändring
Kolumn Gammal regel har ersatts Gammal regel har ersatts

Om en kolumn har både en standard och en regel som är associerad med den, måste standardvärdet ligga inom den domän som definieras av regeln. Ett standardvärde som står i konflikt med en regel infogas aldrig. SQL Server Database Engine genererar ett felmeddelande varje gång den försöker infoga en sådan standard.

Behörigheter

Om du vill köra CREATE RULE måste en användare minst ha behörigheten CREATE RULE i den aktuella databasen och ALTER-behörighet för schemat där regeln skapas.

Exempel

A. Skapa en regel med ett intervall

I följande exempel skapas en regel som begränsar det intervall med heltal som infogas i kolumnen eller kolumnerna som regeln är bunden till.

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

B. Skapa en regel med en lista

I följande exempel skapas en regel som begränsar de faktiska värden som anges i kolumnen eller kolumnerna (till vilka regeln är bunden) till endast de som anges i regeln.

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

C. Skapa en regel med ett mönster

I följande exempel skapas en regel för att följa ett mönster med två tecken följt av ett bindestreck (-), valfritt antal tecken eller inga tecken och slutar med ett heltal från 0 och med 9.

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

Se även

ALTER TABLE (Transact-SQL)
SKAPA STANDARD (Transact-SQL)
SKAPA TABELL (Transact-SQL)
SLÄPP STANDARD (Transact-SQL)
SLÄPPREGEL (Transact-SQL)
uttryck (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)