sp_bindefault (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure 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 der DEFAULT-Schlüsselwort (keyword) 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 NULLdie 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 futureonlyangegeben. 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 todayab.

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.