Sdílet prostřednictvím


CREATE RULE (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAnalytics Platform System (PDW)

Vytvoří objekt s názvem pravidlo. Pokud je vázán na sloupec nebo datový typ aliasu, pravidlo určuje přijatelné hodnoty, které lze vložit do tohoto sloupce.

Důležité

Tato funkce bude odebrána v budoucí verzi SQL Serveru. Nepoužívejte tuto funkci v nové vývojové práci a naplánujte úpravu aplikací, které tuto funkci aktuálně používají. Doporučujeme místo toho použít omezení kontroly. Kontrolní omezení se vytvářejí pomocí klíčového slova CHECK příkazu CREATE TABLE nebo ALTER TABLE. Další informace najdete v tématu Jedinečná omezení a kontrolní omezení.

Datový typ sloupce nebo aliasu může mít svázané pouze s jedním pravidlem. Sloupec ale může mít přidružená pravidla i jedno nebo více omezení kontroly. Pokud je to pravda, vyhodnocují se všechna omezení.

Transact-SQL konvence syntaxe

Syntaxe

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

Argumenty

schema_name
Je název schématu, do kterého pravidlo patří.

rule_name
Je název nového pravidla. Názvy pravidel musí splňovat pravidla pro identifikátory. Zadání názvu vlastníka pravidla je volitelné.

condition_expression
Je podmínka nebo podmínky, které definují pravidlo. Pravidlo může být libovolný výraz platný v klauzuli WHERE a může obsahovat prvky, jako jsou aritmetické operátory, relační operátory a predikáty (například IN, LIKE, BETWEEN). Pravidlo nemůže odkazovat na sloupce ani jiné databázové objekty. Lze zahrnout předdefinované funkce, které neodkazují na databázové objekty. Uživatelem definované funkce nelze použít.

condition_expression obsahuje jednu proměnnou. Znak at (@) předchází každé místní proměnné. Výraz odkazuje na hodnotu zadaná pomocí příkazu UPDATE nebo INSERT. Libovolný název nebo symbol lze použít k vyjádření hodnoty při vytváření pravidla, ale první znak musí být znakem at (@).

Poznámka:

Vyhněte se vytváření pravidel pro výrazy, které používají datové typy aliasů. I když je možné vytvořit pravidla pro výrazy, které používají datové typy aliasů, po vytvoření vazby pravidel na sloupce nebo datové typy aliasů se výrazy při odkazování nezkompilují.

Poznámky

CREATE RULE nelze kombinovat s jinými příkazy Transact-SQL v jedné dávce. Pravidla se nevztahují na data, která již v databázi existují v době vytváření pravidel, a pravidla nelze svázat se systémovými datovými typy.

Pravidlo lze vytvořit pouze v aktuální databázi. Po vytvoření pravidla spusťte sp_bindrule a vytvořte vazbu pravidla na sloupec nebo na datový typ aliasu. Pravidlo musí být kompatibilní s datovým typem sloupce. Například "@value LIKE A%" nelze použít jako pravidlo pro číselný sloupec. Pravidlo nelze svázat s textem, ntextem, obrázkem, varchar(max), nvarchar(max), varbinary(max), xml, uživatelem definovaným typem CLR nebo sloupcem časového razítka . Pravidlo nelze svázat s počítaným sloupcem.

Uzavřete znak a konstanty kalendářního data do jednoduchých uvozovek (') a před binární konstanty 0x. Pokud pravidlo není kompatibilní se sloupcem, ke kterému je vázán, vrátí databázový stroj SQL Serveru chybovou zprávu při vložení hodnoty, ale ne při vazbě pravidla.

Pravidlo vázané na datový typ aliasu se aktivuje jenom v případě, že se pokusíte vložit hodnotu do datového typu aliasu nebo aktualizovat sloupec databáze. Vzhledem k tomu, že pravidla neotestují proměnné, nepřiřaďte hodnotu proměnné datového typu aliasu, která by byla odmítnuta pravidlem, které je vázané na sloupec stejného datového typu.

Pokud chcete získat sestavu pravidla, použijte sp_help. Pokud chcete zobrazit text pravidla, spusťte sp_helptext s názvem pravidla jako parametrem. K přejmenování pravidla použijte sp_rename.

Před vytvořením nového pravidla se stejným názvem musí být pravidlo vyřazeno pomocí DROP RULE a pravidlo musí být nevázané pomocí sp_unbindrule před jeho vyřazením. Pokud chcete zrušit vazbu pravidla ze sloupce, použijte sp_unbindrule.

Nové pravidlo můžete svázat se sloupcem nebo datovým typem bez zrušení vazby předchozího pravidla; nové pravidlo přepíše předchozí pravidlo. Pravidla svázaná se sloupci mají vždy přednost před pravidly svázanými s datovými typy aliasů. Vazba pravidla na sloupec nahrazuje pravidlo, které je již vázané na datový typ aliasu daného sloupce. Vazba pravidla na datový typ však nenahrazuje pravidlo vázané na sloupec tohoto datového typu aliasu. V následující tabulce je uvedena priorita, pokud jsou pravidla svázaná se sloupci a aliasy datových typů, u kterých již existují pravidla.

Nové pravidlo vázané na Staré pravidlo vázané na

Datový typ aliasu
Staré pravidlo vázané na

Sloupec
Datový typ aliasu Původní pravidlo nahrazeno Beze změny
Sloupec Původní pravidlo nahrazeno Původní pravidlo nahrazeno

Pokud má sloupec přidruženou výchozí hodnotu i pravidlo, musí výchozí nastavení spadat do domény definované pravidlem. Výchozí hodnota, která je v konfliktu s pravidlem, se nikdy nevloží. Databázový stroj SQL Serveru vygeneruje chybovou zprávu pokaždé, když se pokusí vložit takový výchozí.

Povolení

Aby uživatel mohl spustit pravidlo CREATE RULE, musí mít minimálně oprávnění CREATE RULE v aktuální databázi a oprávnění ALTER schématu, ve kterém se pravidlo vytváří.

Příklady

A. Vytvoření pravidla s rozsahem

Následující příklad vytvoří pravidlo, které omezuje rozsah celých čísel vložených do sloupce nebo sloupců, na které je toto pravidlo vázáno.

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

B. Vytvoření pravidla se seznamem

Následující příklad vytvoří pravidlo, které omezuje skutečné hodnoty zadané do sloupce nebo sloupců (na které je toto pravidlo vázáno) pouze na hodnoty uvedené v pravidle.

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

C. Vytvoření pravidla se vzorem

Následující příklad vytvoří pravidlo pro sledování vzoru libovolných dvou znaků následovaných spojovníkem (-), libovolný počet znaků nebo žádných znaků a končící celým číslem od 0 konce 9.

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

Viz také

ALTER TABLE (Transact-SQL)
CREATE DEFAULT (Transact-SQL)
VYTVOŘIT TABULKU (Transact-SQL)
DROP DEFAULT (Transact-SQL)
DROP RULE (Transact-SQL)
výrazy (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)