sp_bindefault (Transact-SQL)
Bindet einen Standard an eine Spalte oder einen Aliasdatentyp.
Wichtig |
---|
Diese Funktion wird in zukünftigen Versionen von Microsoft SQL Server nicht mehr bereitgestellt. Verwenden Sie diese Funktion beim Entwickeln neuer Anwendungen nicht, und planen Sie so bald wie möglich das Ändern von Anwendungen, in denen es zurzeit verwendet wird. Es wird empfohlen, dass Sie Standarddefinitionen stattdessen mit dem DEFAULT-Schlüsselwort der Anweisungen ALTER TABLE oder CREATE TABLE erstellen. Weitere Informationen finden Sie unter Erstellen und Ändern von DEFAULT-Definitionen. |
Syntax
sp_bindefault [ @defname = ] 'default' ,
[ @objname = ] 'object_name'
[ , [ @futureonly = ] 'futureonly_flag' ]
Argumente
[ [ @defname= ] 'default'
Der Name des Standards, der von CREATE DEFAULT erstellt wird. default ist vom Datentyp nvarchar(776) und hat keinen Standard.[ [ @objname= ] 'object_name'
Der Name der Tabelle und Spalte oder der Aliasdatentyp, an den der Standard gebunden werden soll. object_name ist vom Datentyp nvarchar(776) und hat keinen Standard. object_name kann nicht mit den Datentypen varchar(max), nvarchar(max), varbinary(max), xml oder CLR-benutzerdefinierten Typen definiert werden.Wenn object_name ein einteiliger Name ist, wird er als Aliasdatentyp aufgelöst. Ein zwei- oder dreiteiliger Name wird zunächst als Tabelle und Spalte aufgelöst. Wenn die Auflösung fehlschlägt, wird er als Aliasdatentyp aufgelöst. Vorhandene Spalten des Aliasdatentyps erben standardmäßig default, es sei denn, ein Standardwert ist direkt an die Spalte gebunden. Ein Standard kann nicht an eine Spalte des Typs text, ntext, image, varchar(max), nvarchar(max), varbinary(max), xml, timestamp oder eines CLR-benutzerdefinierten Typs gebunden sein. Darüber hinaus kann ein Standard nicht an eine Spalte mit der IDENTITY-Eigenschaft, eine berechnete Spalte oder eine Spalte gebunden sein, die bereits eine DEFAULT-Einschränkung hat.
Hinweis object_name kann eckige Klammern [] als begrenzte Bezeichner enthalten. Weitere Informationen finden Sie unter Begrenzte Bezeichner (Datenbankmodul).
[ [ @futureonly= ] 'futureonly_flag'
Wird nur beim Binden eines Standards an einen Aliasdatentyp verwendet. futureonly_flag ist vom Datentyp varchar(15), der Standardwert ist NULL. Wenn dieser Parameter auf den Wert futureonly festgelegt wird, können vorhandene Spalten dieses Datentyps den neuen Standard nicht erben. Dieser Parameter wird nie beim Binden eines Standards an eine Spalte verwendet. Wenn futureonly_flag den Wert NULL hat, wird der neue Standard an alle Spalten des Aliasdatentyps gebunden, die aktuell keinen Standard aufweisen oder die den vorhandenen Standard des Aliasdatentyps verwenden.
Rückgabecodewerte
0 (Erfolg) oder 1 (Fehler)
Hinweise
Sie können einen neuen Standard mit sp_bindefault an eine Spalte (obwohl empfohlen wird, die DEFAULT-Einschränkung zu verwenden) oder an einen Aliasdatentyp binden, ohne die Bindung eines vorhandenen Standards aufzuheben. Der alte Standard wird außer Kraft gesetzt. Sie können einen Standard nicht an einen SQL Server-Systemdatentyp oder an einen CLR-benutzerdefinierten Typ binden. Ist der Standard nicht kompatibel mit der Spalte, an die er gebunden wurde, gibt SQL Server Database Engine (Datenbankmodul) eine Fehlermeldung zurück, wenn der Standardwert eingefügt werden soll (nicht beim Binden).
Vorhandene Spalten des Aliasdatentyps erben den neuen Standard, es sei denn, ein Standard wurde direkt an sie gebunden oder futureonly_flag wurde mit futureonly angegeben. Neue Spalten des Aliasdatentyps erben immer den Standard.
Wenn Sie einen Standard an eine Spalte binden, werden der sys.columns-Katalogsicht zugehörige Informationen hinzugefügt. Wenn Sie einen Standard an einen Aliasdatentyp binden, werden der sys.types-Katalogsicht zugehörige Informationen hinzugefügt.
Berechtigungen
Der Benutzer muss Besitzer der Tabelle oder Mitglied der festen Serverrolle sysadmin, der festen Datenbankrolle db_owner oder der festen Datenbankrolle db_ddladmin sein.
Beispiele
A. Binden eines Standards an eine Spalte
In der aktuellen Datenbank wurde mit CREATE DEFAULT ein Standard mit dem Namen today definiert. Im folgenden Beispiel wird der Standard an die HireDate-Spalte der Employee-Tabelle gebunden. Wird zur Employee-Tabelle eine Zeile hinzugefügt und werden für die HireDate-Spalte keine Daten angegeben, erhält die Spalte den Wert des Standards today.
USE master;
GO
EXEC sp_bindefault 'today', 'HumanResources.Employee.HireDate';
B. Binden eines Standards 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 des Typs ssn erben ebenfalls den Standard def_ssn, sofern nicht futureonly als Wert für futureonly_flag angegeben wird oder an die Spalte nicht direkt ein Standard gebunden ist. An Spalten gebundene Standards haben stets Vorrang vor den an Datentypen gebundenen Standards.
USE master;
GO
EXEC sp_bindefault 'def_ssn', 'ssn';
C. Verwenden von futureonly_flag
Im folgenden Beispiel bindet der Standard def_ssn an den Aliasdatentyp ssn. Da futureonly angegeben wurde, sind vorhandene Spalten des Typs ssn nicht betroffen.
USE master;
GO
EXEC sp_bindefault 'def_ssn', 'ssn', 'futureonly';
D. Verwenden von begrenzten Bezeichnern
Im folgenden Beispiel wird die Verwendung von begrenzten Bezeichnern, [t.1], in object_name gezeigt.
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.