sp_bindefault (Transact-SQL)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance
Bindet einen Standard an eine Spalte oder einen Aliasdatentyp.
Wichtig
Diese Funktion wird in einer zukünftigen Version von SQL Serverentfernt. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktion zurzeit verwenden. Es wird empfohlen, standarddefinitionen stattdessen mithilfe des DEFAULT-Schlüsselworts der ALTER TABLE - oder CREATE TABLE-Anweisungen zu erstellen.
Transact-SQL-Syntaxkonventionen
Syntax
sp_bindefault
[ @defname = ] N'defname'
, [ @objname = ] N'objname'
[ , [ @futureonly = ] 'futureonly' ]
[ ; ]
Argumente
[ @defname = ] N'defname'
Der Name des von CREATE DEFAULT
. @defname ist nvarchar(776), ohne Standard.
[ @objname = ] N'objname'
Der Name der Tabelle und Spalte oder des Aliasdatentyps, an den der Standardwert gebunden werden soll. @objname ist nvarchar(776), ohne Standard. @objname kann nicht mit benutzerdefinierten Typen varchar(max), nvarchar(max), varbinary(max), xml oder CLR definiert werden.
Wenn @objname ein einteiliger Name ist, wird er als Aliasdatentyp aufgelöst. Wenn es sich um einen zwei- oder dreiteiligen Namen handelt, wird er zuerst als Tabelle und Spalte aufgelöst. und wenn diese Auflösung fehlschlägt, wird sie als Aliasdatentyp aufgelöst. Standardmäßig erben vorhandene Spalten des Aliasdatentyps @defname, es sei denn, eine Standardeinstellung ist direkt an die Spalte gebunden. Ein Standardwert kann nicht an eine text-, ntext-, image-, varchar(max)-, nvarchar(max)-, varbinary(max)-, xml-, timestamp- oder CLR-Benutzerdefinierte Typspalte, eine Spalte mit der IDENTITY
Eigenschaft, eine berechnete Spalte oder eine Spalte gebunden werden, die bereits eine DEFAULT
Einschränkung aufweist.
@objname können Klammern ([
und ]
) als durch Trennzeichen getrennte Bezeichner enthalten. Weitere Informationen finden Sie unter Datenbankbezeichner.
[ @futureonly = ] 'futureonly'
Wird nur verwendet, wenn ein Standard an einen Aliasdatentyp gebunden wird. @futureonly ist varchar(15) mit einem Standardwert von NULL
. Wenn dieser Parameter auf futureonly
festgelegt ist, können vorhandene Spalten dieses Datentyps den neuen Standardwert nicht erben. Dieser Parameter wird nie beim Binden eines Standards an eine Spalte verwendet. Wenn @futureonly ist, wird NULL
die neue Standardeinstellung an alle Spalten des Aliasdatentyps gebunden, die derzeit keinen Standardwert aufweisen oder die den vorhandenen Standardwert des Aliasdatentyps verwenden.
Rückgabecodewerte
0
(erfolgreich) oder 1
Fehler.
Hinweise
Sie können eine sp_bindefault
neue Standardeinstellung an eine Spalte binden, obwohl die DEFAULT
Einschränkung bevorzugt wird, oder an einen Aliasdatentyp, ohne die Bindung eines vorhandenen Standardwerts aufzuheben. Der alte Standard wird überschrieben. Sie können keinen Standard an einen SQL Server-Systemdatentyp oder einen benutzerdefinierten CLR-Typ binden. Wenn der Standardwert nicht mit der Spalte kompatibel ist, an die Sie sie gebunden haben, gibt die SQL Server-Datenbank-Engine eine Fehlermeldung zurück, wenn versucht wird, den Standardwert einzufügen, nicht wenn Sie ihn binden.
Vorhandene Spalten des Aliasdatentyps erben die neue Standardeinstellung, es sei denn, eine Standardeinstellung ist direkt an sie gebunden oder wird zukünftig als futureonly
angegeben. Neue Spalten des Aliasdatentyps erben immer den Standard.
Wenn Sie eine Standardeinstellung an eine Spalte binden, werden der Katalogansicht verwandte Informationen hinzugefügt sys.columns
. Wenn Sie einen Standard an einen Aliasdatentyp binden, werden der Katalogansicht verwandte Informationen hinzugefügt sys.types
.
Berechtigungen
Der Benutzer muss der Besitzer der Tabelle sein oder Mitglied der festen Serverrolle "sysadmin " oder der db_owner und db_ddladmin festen Datenbankrollen sein.
Beispiele
A. Binden einer Standardeinstellung an eine Spalte
Ein Standardname today
wird in der aktuellen Datenbank mithilfe von CREATE DEFAULT
. Im folgenden Beispiel wird die Standardeinstellung an die HireDate
Spalte der Employee
Tabelle gebunden. Wenn der Employee
Tabelle und den Daten für die HireDate
Spalte keine Zeile hinzugefügt wird, ruft die Spalte den Wert des Standardwerts today
ab.
USE master;
GO
EXEC sp_bindefault 'today', 'HumanResources.Employee.HireDate';
B. Binden eines Standardwerts an einen Aliasdatentyp
Ein Standard namens def_ssn
und ein Aliasdatentyp namens ssn
sind bereits vorhanden. Im folgenden Beispiel wird der Standard def_ssn
an den Typ ssn
gebunden. Wenn eine Tabelle erstellt wird, wird der Standard von allen Spalten geerbt, denen der Aliasdatentyp ssn
zugewiesen ist. Vorhandene Spalten vom Typ ssn
erben auch die Standardeinstellung def_ssn
, es sei denn futureonly
, für den @futureonly-Wert angegeben wird, oder die Spalte weist eine direkt an sie gebundene Standardspalte auf. Standardwerte, die an Spalten gebunden sind, haben immer Vorrang vor Standardeinstellungen, die an Datentypen gebunden sind.
USE master;
GO
EXEC sp_bindefault 'def_ssn', 'ssn';
C. Verwenden Sie die Option futureonly
.
Im folgenden Beispiel bindet der Standard def_ssn
an den Aliasdatentyp ssn
. Da futureonly
angegeben wurde, sind keine vorhandenen Spalten des Typs ssn
betroffen.
USE master;
GO
EXEC sp_bindefault 'def_ssn', 'ssn', 'futureonly';
D: Verwenden von durch Trennzeichen getrennten Bezeichnern
Das folgende Beispiel zeigt die Verwendung von durch Trennzeichen getrennten Bezeichnern [t.1]
in @objname.
USE master;
GO
CREATE TABLE [t.1] (c1 int);
-- Notice the period as part of the table name.
EXEC 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.