Udostępnij za pomocą


sp_bindefault (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBaza danych SQL w usłudze Microsoft Fabric

Przypisuje domyślne dane do kolumny lub typu danych alias.

Ważne

Ta funkcja zostanie usunięta w przyszłej wersji programu SQL Server. Unikaj używania tej funkcji w nowych pracach programistycznych i zaplanuj modyfikowanie aplikacji, które obecnie korzystają z tej funkcji. Zalecamy tworzenie domyślnych definicji, używając słowa kluczowego DEFAULT w instrukcjach ALTER TABLE lub CREATE TABLE .

Transact-SQL konwencje składni

Składnia

sp_bindefault
    [ @defname = ] N'defname'
    , [ @objname = ] N'objname'
    [ , [ @futureonly = ] 'futureonly' ]
[ ; ]

Arguments

[ @defname = ] N'defname'

Nazwa domyślnej utworzonej przez CREATE DEFAULT. @defname to nvarchar(776), bez domyślnego statusu.

[ @objname = ] N'objname'

Nazwa tabeli i kolumny, albo typ danych alias, do którego domyślnie ma być przypisany. @objname to nvarchar(776), bez domyślnego zachowania. @objname nie można zdefiniować za pomocą typów zdefiniowanych przez użytkownika varchar(max),nvarchar(max),varbinary(max),xml ani CLR.

Jeśli @objname jest jednoczęściową nazwą, rozstrzyga się jako typ danych alias. Jeśli nazwa jest dwu- lub trzyczęściowa, najpierw rozstrzyga się jako tabela i kolumna; a jeśli ta rezolucja nie zadziała, rozstrzyga się jako typ danych alias. Domyślnie istniejące kolumny typu danych aliasu dziedziczą @defname, chyba że domyślna kolumna jest bezpośrednio powiązana z tą kolumną. Domyślna kolumna nie może być powiązana z tekstem, ntextem, obrazem, varchar(max),nvarchar(max),varbinary(max), xml, timestampem ani kolumną CLR zdefiniowaną przez użytkownika, kolumną z tą IDENTITY właściwością, kolumną obliczeniową ani kolumną, która już ma ograniczenie DEFAULT .

@objname może zawierać nawiasy ([ i ]) jako identyfikatory wydzielone. Aby uzyskać więcej informacji, zobacz Identyfikatory bazy danych.

[ @futureonly = ] 'tylko na przyszłość'

Używany tylko przy powiązaniu domyślnego z typem danych alias. @futureonly to varchar(15), z domyślnym .NULL Gdy ten parametr jest ustawiony na futureonly, istniejące kolumny tego typu danych nie mogą odziedziczyć nowego domyślnego. Ten parametr nigdy nie jest używany przy przypisywaniu domyślnego do kolumny. Jeśli @futureonly jest , NULLnowa domyślna jest powiązana z kolumnami typu danych alias, które obecnie nie mają domyślnego lub korzystają z istniejącego domyślnego typu alias.

Zwracanie wartości kodu

0 (powodzenie) lub 1 (niepowodzenie).

Uwagi

Możesz użyć sp_bindefault do przypisania nowej domyślnej wartości do kolumny, choć preferowane jest użycie DEFAULT tego ograniczenia, lub do typu danych aliasu bez odwiązywania istniejącego domyślnego. Stara domyślność została nadpisana. Nie można przypisać domyślnego typu danych SQL Server ani typu CLR zdefiniowanego przez użytkownika. Jeśli domyślna nie jest zgodna z kolumną, do której ją przypisasz, silnik bazy danych SQL Server zwraca komunikat o błędzie, gdy próbuje wstawić wartość domyślną, a nie podczas przypisania.

Istniejące kolumny typu danych aliasu dziedziczą nowy domyślny element, chyba że domyślny jest bezpośrednio z nimi powiązany lub futureonly jest określony jako futureonly. Nowe kolumny typu danych aliasu zawsze dziedziczą domyślne.

Gdy przypisujesz domyślną kolumnę, powiązane informacje są dodawane do widoku sys.columns katalogu. Gdy przypisujesz domyślny element do typu danych alias, powiązane informacje są dodawane do widoku sys.types katalogu.

Permissions

Użytkownik musi być właścicielem tabeli lub być członkiem roli stałego administratora systemu lub ról db_owner i db_ddladmin stałej bazy danych.

Przykłady

A. Przypisz domyślną kolumnę

Domyślna nazwa today jest definiowana w aktualnej bazie danych, używając .CREATE DEFAULT Poniższy przykład wiąże domyślne ustawienia z kolumną HireDate tabeli Employee . Za każdym razem, gdy do tabeli Employee dodany jest wiersz, a dane dla kolumny HireDate nie są dostarczane, kolumna otrzymuje wartość domyślnej today.

USE master;
GO

EXECUTE sp_bindefault 'today', 'HumanResources.Employee.HireDate';

B. Przypisz domyślny element do typu danych aliasu

Domyślnie def_ssn nazwana i alias o nazwie ssn już istnieją. Poniższy przykład wiąże domyślne def_ssn z .ssn Po utworzeniu tabeli domyślna jest dziedziczona przez wszystkie kolumny, którym przypisany jest typ ssndanych aliasu . Istniejące kolumny typu ssn również dziedziczą domyślną def_ssnwartość , chyba że futureonly jest to określone dla wartości @futureonly lub kolumna ma domyślne ograniczenie bezpośrednio do niej. Domyślne kolumny zawsze mają pierwszeństwo przed domyślnymi powiązanymi z typami danych.

USE master;
GO

EXECUTE sp_bindefault 'def_ssn', 'ssn';

C. futureonly Użyj opcji

Poniższy przykład wiąże domyślne def_ssn dane z typem ssndanych aliasu . Ponieważ futureonly jest określona, żadne istniejące kolumny typu ssn nie są dotknięte.

USE master;
GO

EXECUTE sp_bindefault 'def_ssn', 'ssn', 'futureonly';

D. Używaj identyfikatorów ograniczonych

Poniższy przykład pokazuje użycie oznaczonych identyfikatorów, [t.1], w @objname.

USE master;
GO

CREATE TABLE [t.1] (c1 INT);

-- Notice the period as part of the table name.
EXECUTE sp_bindefault 'default1', '[t.1].c1';

-- The object contains two periods;
-- the first is part of the table name,
-- and the second distinguishes the table name from the column name.