Zadání výchozích hodnot pro sloupce
platí pro: SQL Server 2016 (13.x) a novější Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)
Sql Server Management Studio (SSMS) můžete použít k určení výchozí hodnoty zadané do sloupce tabulky. Výchozí nastavení můžete nastavit pomocí Průzkumníka objektů nebo spuštěním jazyka Transact-SQL.
Pokud ke sloupci nepřiřadíte výchozí hodnotu a uživatel ponechá sloupec prázdný, pak:
Pokud nastavíte možnost povolit hodnoty null,
NULL
se vloží do sloupce.Pokud možnost povolit hodnoty null nenastavíte, zůstane sloupec prázdný, ale uživatel nebo aplikace nemůže vložit řádek, dokud nezadají hodnotu sloupce.
Pro různé úlohy můžete použít výchozí omezení, abyste zajistili konzistenci dat na úrovni databáze:
- Nastavte hodnotu řádku pro sloupec "aktivní" nebo "zapnuto" na
1
při vložení. - Nastavte hodnotu řádku pole kalendářního data na aktuální datum.
- Nastavte hodnotu řádku pole na deterministické systémové funkce, například
DB_NAME()
.
Omezení
Než začnete, mějte na paměti následující omezení a restrikce:
Pokud položka v poli Výchozí hodnota nahradí vázané výchozí hodnoty (která se zobrazí bez závorek), zobrazí se výzva k zrušení vazby výchozí hodnoty a nahrazení novým výchozím nastavením.
Pokud chcete zadat textový řetězec, uzavřete hodnotu do jednoduchých uvozovek (
'
). Nepoužívejte dvojité uvozovky ("
), protože jsou vyhrazené pro označení v uvozovkách.Pokud chcete zadat číselné výchozí hodnoty, zadejte číslo bez uvozovek.
Pokud chcete zadat objekt nebo funkci, zadejte název objektu nebo funkce bez uvozovek.
Ve službě Azure Synapse Analytics je možné pro výchozí omezení použít jenom konstanty. Výraz nelze použít s výchozím omezením.
Dovolení
Akce popsané v tomto článku vyžadují ALTER
oprávnění na tabulce.
Určení výchozího nastavení pomocí aplikace SQL Server Management Studio
Pomocí Průzkumníka objektů v SSMS můžete zadat výchozí hodnotu sloupce tabulky. Postupujte takto:
Připojte se k instanci SQL Serveru v nástroji SSMS.
V Průzkumníku objektůklikněte pravým tlačítkem na tabulku obsahující sloupce, u kterých chcete změnit měřítko, a vyberte Návrh.
Vyberte sloupec, pro který chcete zadat výchozí hodnotu.
Na kartě Vlastnosti sloupce zadejte novou výchozí hodnotu do vlastnosti Výchozí hodnota nebo Vazba.
Pokud chcete zadat číselnou výchozí hodnotu, zadejte číslo. Jako objekt nebo funkci zadejte jeho název. Jako výchozí alfanumerické znaky zadejte hodnotu do jednoduchých uvozovek.
V nabídce Soubor vyberte Uložit <název tabulky>.
Určení výchozího nastavení pomocí Transact-SQL
Existují různé způsoby, jak pomocí jazyka T-SQL zadat výchozí hodnotu pro sloupec. V každém z následujících příkladů můžete otevřít nový dotaz Transact-SQL pomocí tohoto postupu.
V Průzkumníku objektůse připojte k instanci Databázový stroj.
Na panelu Standard vyberte Nový dotaz.
Zkopírujte a vložte příklad do okna dotazu a vyberte Spustit.
Použití pojmenovaného omezení
Při práci s databázovými projekty se doporučuje vytvořit omezení s názvy. V opačném případě se výchozímu omezení přidělí systémem vygenerovaný název, který se bude lišit v každém prostředí sql serveru, ve kterém se vytvoří vaše databázové objekty.
CREATE TABLE dbo.doc_exz (
column_a INT,
column_b INT CONSTRAINT DF_Doc_Exz_Column_B DEFAULT 50
);
Použití příkazu ALTER TABLE
Pojmenované omezení můžete přidat do existující tabulky s ALTER TABLE
.
CREATE TABLE dbo.doc_exz (
column_a INT,
column_b INT
); -- Allows nulls.
GO
INSERT INTO dbo.doc_exz (column_a)
VALUES (7);
GO
ALTER TABLE dbo.doc_exz
ADD CONSTRAINT DF_Doc_Exz_Column_B DEFAULT 50 FOR column_b;
GO
Použijte CREATE TABLE
Můžete vytvořit novou tabulku s výchozími omezeními s CREATE TABLE
.
CREATE TABLE dbo.doc_exz (
column_a INT,
column_b INT CONSTRAINT DF_Doc_Exz_Column_B DEFAULT 50
);
Nastavit datum vytvoření
Následující příklad používá systémovou funkci sysdatetimeoffset()
k naplnění hodnoty řádku sloupce dateinserted
datem, kdy byl řádek vytvořen.
CREATE TABLE dbo.test (
id INT identity(1, 1) NOT NULL CONSTRAINT PK_test PRIMARY KEY
,date_inserted DATETIMEOFFSET(2) NOT NULL CONSTRAINT DF_test_date_inserted DEFAULT(sysdatetimeoffset())
);
Výchozí omezení se při aktualizaci řádku nezmění. Pokud chcete aktualizovat hodnotu při každé změně řádku, zvažte použitítriggeru
Pokud chcete zjistit řádky, které se mění, zvažte zaznamenávání změn dat (CDC), sledování změn, dočasnou tabulkunebo tabulku registru.