Sdílet prostřednictvím


VYTVOŘIT VÝCHOZÍ (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Vytvoří objekt s názvem výchozí. Při vazbě ke sloupci nebo datovému typu alias určuje výchozí hodnota, která se má vložit do sloupce, ke kterému je objekt svázán (nebo do všech sloupců, pokud datový typ aliasu), pokud během vložení není explicitně zadána žádná hodnota.

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í. Místo toho použijte výchozí definice vytvořené pomocí klíčového DEFAULTALTER TABLE slova nebo CREATE TABLE.

Transact-SQL konvence syntaxe

Syntaxe

CREATE DEFAULT [ schema_name . ] default_name
AS constant_expression [ ; ]

Arguments

schema_name

Název schématu, do kterého patří výchozí nastavení.

default_name

Název výchozího nastavení. Výchozí názvy musí odpovídat pravidlům identifikátorů. Zadání výchozího jména vlastníka je volitelné.

constant_expression

Výraz, který obsahuje pouze konstantní hodnoty (nemůže obsahovat názvy žádných sloupců ani jiných databázových objektů). Můžete použít libovolnou konstantu, integrovanou funkci nebo matematický výraz s výjimkou těch, které obsahují datové typy aliasů. Uživatelem definované funkce nelze použít. Uzavírací znak a konstanty kalendářních dat do jednoduchých uvozovek ('); peněžní, celočíselné a plovoucí desetiny nevyžadují uvozovky. Binární data musí předcházet 0xa peněžní data musí předcházet znakem dolaru ($). Výchozí hodnota musí být kompatibilní s datovým typem sloupce.

Poznámky

V aktuální databázi můžete vytvořit pouze výchozí název. V databázi musí být výchozí názvy jedinečné podle schématu. Když vytvoříte výchozí hodnotu, použijte sp_bindefault ji k vytvoření vazby ke sloupci nebo k datovému typu aliasu.

Pokud výchozí hodnota není kompatibilní se sloupcem, ke kterému je vázán, SQL Server při pokusu o vložení výchozí hodnoty vygeneruje chybovou zprávu. Například není možné použít jako výchozí pro číselný sloupec.

Pokud je výchozí hodnota pro sloupec, na který je vázána, příliš dlouhá, je hodnota zkrácena.

CREATE DEFAULT příkazy nelze kombinovat s jinými příkazy Transact-SQL v jedné dávce.

Před vytvořením nového názvu musí být odstraněna výchozí hodnota. Výchozí hodnota musí být nevázaná spuštěním sp_unbindefault , než se vyřadí.

Pokud má sloupec přiřazené výchozí i pravidlo, nesmí výchozí hodnota pravidlo porušit. Výchozí hodnota, která je v konfliktu s pravidlem, se nikdy nevloží a SQL Server pokaždé, když se pokusí vložit výchozí hodnotu, vygeneruje chybovou zprávu.

Při vazbě na sloupec se vloží výchozí hodnota, když:

  • Hodnota není explicitně vložena.
  • K vložení výchozích hodnot se používají DEFAULT VALUES klíčová DEFAULT slova nebo INSERT klíčová slova.

Pokud zadáte NOT NULL při vytváření sloupce a nevytvoříte pro něj výchozí hodnotu, vygeneruje se chybová zpráva, když se uživateli nepodaří vytvořit položku v daném sloupci. Následující tabulka znázorňuje vztah mezi existencí výchozí hodnoty a definicí sloupce jako NULL nebo NOT NULL. Položky v tabulce zobrazují výsledek.

Definice sloupce Žádná položka, bez výchozího nastavení Žádná položka, výchozí Enter NULL, bez výchozího nastavení Zadejte NULL, výchozí
NULL NULL Výchozí NULL NULL
NOT NULL Error Výchozí Error Error

Pokud chcete přejmenovat výchozí hodnotu, použijte sp_rename pro sestavu výchozí hodnotu .sp_help

Povolení

Aby uživatel mohl používat CREATE DEFAULTminimálně , musí mít CREATE DEFAULT oprávnění v aktuální databázi a ALTER oprávnění ke schématu, ve kterém se vytváří výchozí nastavení.

Examples

A. Vytvoření výchozího základního znaku

Následující příklad vytvoří znak výchozí název unknown.

USE AdventureWorks2022;
GO

CREATE DEFAULT phonedflt
    AS 'unknown';

B. Vytvoření vazby výchozí hodnoty

Následující příklad vytvoří vazbu výchozího vytvořeného v příkladu A. Výchozí hodnota se projeví jenom v případě, že pro sloupec Phone tabulky není zadána Contact žádná položka.

Poznámka:

Vynechání jakékoli položky se liší od explicitního zápisu NULLINSERT v příkazu.

Vzhledem k tomu, že výchozí název phonedflt neexistuje, následující příkaz Transact-SQL selže. Tento příklad je určen pouze pro ilustraci.

USE AdventureWorks2022;
GO

EXECUTE sp_bindefault 'phonedflt', 'Person.PersonPhone.PhoneNumber';