it-swarm.com.de

Festlegen eines Standardwerts für eine vorhandene Spalte

Dies funktioniert nicht in SQL Server 2008:

ALTER TABLE Employee ALTER COLUMN CityBorn SET DEFAULT 'SANDNES'

Der Fehler ist:

Falsche Syntax in der Nähe des Schlüsselworts 'SET'.

Was mache ich falsch?

316
Nakul Chaudhary

Dies funktioniert in SQL Server:

ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;
493
Yuck
ALTER TABLE Employee ADD DEFAULT 'SANDNES' FOR CityBorn
144
hoodaticus

kann keine Spalte alter verwenden, stattdessen add

ALTER TABLE Employee 
ADD DEFAULT('SANDNES') FOR CityBorn
45

Der richtige Weg, dies zu tun, ist wie folgt: 

  1. Führen Sie den Befehl aus: 

    sp_help [table name] 
    
  2. Kopieren Sie den Namen der CONSTRAINT.

  3. DEFAULT CONSTRAINT ablegen:

    ALTER TABLE [table name] DROP [NAME OF CONSTRAINT] 
    
  4. Führen Sie den folgenden Befehl aus:

    ALTER TABLE [table name] ADD DEFAULT [DEFAULT VALUE] FOR [NAME OF COLUMN]
    
26
user3310402

Die Lösung von Hoodaticus war perfekt, danke, aber ich brauchte sie auch, um wieder laufen zu können. 

IF EXISTS(SELECT * FROM information_schema.columns 
           WHERE table_name='myTable' AND column_name='myColumn' 
             AND Table_schema='myDBO' AND column_default IS NULL) 
BEGIN 
  ALTER TABLE [myDBO].[myTable] ADD DEFAULT 0 FOR [myColumn] --Hoodaticus
END
9
Dave

Es gibt zwei Szenarien, in denen der Standardwert für eine Spalte geändert werden kann.

  1. Zum Zeitpunkt der Erstellung der Tabelle
  2. Ändern Sie die vorhandene Spalte für eine vorhandene Tabelle.

  1. Zum Zeitpunkt der Erstellung einer Tabelle/Erstellung einer neuen Spalte.

Abfrage 

create table table_name
(
    column_name datatype default 'any default value'
);
  1. Ändern Sie die vorhandene Spalte für eine vorhandene Tabelle

In diesem Fall kann mein SQL-Server den vorhandenen Standardeinschränkungswert nicht ändern. Um den Standardwert zu ändern, müssen Sie das vorhandene System oder die vom Benutzer generierte Standardeinschränkung löschen. Danach kann dieser Standardwert für eine bestimmte Spalte festgelegt werden.

Befolgen Sie einige Schritte:

  1. Alle vorhandenen Standardwerteinschränkungen für Spalten auflisten.

Führen Sie diese Systemdatenbankprozedur aus. Sie verwendet den Tabellennamen als Parameter. Es gibt eine Liste aller Einschränkungen für alle Spalten in der Tabelle zurück.

execute [dbo].[sp_helpconstraint] 'table_name'
  1. Vorhandene Standardeinschränkung für eine Spalte löschen.

Syntax:

alter table 'table_name' drop constraint 'constraint_name'
  1. Fügen Sie eine neue Standardwerteinschränkung für diese Spalte hinzu:

Syntax:

alter table 'table_name' add default 'default_value' for 'column_name'

prost @!!!

5
Sunil Sharma

Es wurden nur 3 einfache Schritte gefunden, um die bereits vorhandene Spalte zu ändern, die zuvor null war

update   orders
set BasicHours=0 where BasicHours is null

alter table orders 
add default(0) for BasicHours

alter table orders 
alter  column CleanBasicHours decimal(7,2) not null 
3
David Fawzy
ALTER TABLE [dbo].[Employee] ADD  DEFAULT ('N') FOR [CityBorn]
3
steave

Versuchen Sie den folgenden Befehl.

ALTER TABLE Person11
ADD CONSTRAINT col_1_def
DEFAULT 'This is not NULL' FOR Address
2
Hasna Ashraf

Wie Yucks Antwort mit einem Häkchen, damit das Skript mehr als einmal ohne Fehler ausgeführt werden kann. (weniger Code/benutzerdefinierte Zeichenfolgen als bei information_schema.columns)

IF object_id('DF_SomeName', 'D') IS NULL BEGIN
    Print 'Creating Constraint DF_SomeName'
   ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;
END
1
ScottFoster1000

Sie können die folgende Syntax verwenden: Weitere Informationen finden Sie in dieser Frage und den Antworten: Hinzufügen einer Spalte mit einem Standardwert zu einer vorhandenen Tabelle in SQL Server

Syntax :

ALTER TABLE {TABLENAME} 
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
WITH VALUES

Beispiel:

ALTER TABLE SomeTable
ADD SomeCol Bit NULL --Or NOT NULL.
CONSTRAINT D_SomeTable_SomeCol --When Omitted a Default-Constraint Name is 
autogenerated.
DEFAULT (0)--Optional Default-Constraint.
WITH VALUES --Add if Column is Nullable and you want the Default Value for Existing Records.

Ein anderer Weg:

Klicken Sie mit der rechten Maustaste auf die Tabelle und klicken Sie auf Entwurf. Klicken Sie dann auf die Spalte, für die Sie den Standardwert festlegen möchten.

Fügen Sie dann am Ende der Seite einen Standardwert oder eine Standardbindung hinzu: "1" für Zeichenfolge oder 1 für int.

1

Erste Drop-Einschränkungen

https://stackoverflow.com/a/49393045/2547164

DECLARE @ConstraintName nvarchar(200)
SELECT @ConstraintName = Name FROM SYS.DEFAULT_CONSTRAINTS
WHERE PARENT_OBJECT_ID = OBJECT_ID('__TableName__')
AND PARENT_COLUMN_ID = (SELECT column_id FROM sys.columns
                        WHERE NAME = N'__ColumnName__'
                        AND object_id = OBJECT_ID(N'__TableName__'))
IF @ConstraintName IS NOT NULL
EXEC('ALTER TABLE __TableName__ DROP CONSTRAINT ' + @ConstraintName)

Zweitens Standardwert erstellen

ALTER TABLE [table name] ADD DEFAULT [default value] FOR [column name]
1
Mise

falls bereits eine Einschränkung mit dem Standardnamen vorhanden ist:

-- Drop existing default constraint on Employee.CityBorn
DECLARE @default_name varchar(256);
SELECT @default_name = [name] FROM sys.default_constraints WHERE parent_object_id=OBJECT_ID('Employee') AND COL_NAME(parent_object_id, parent_column_id)='CityBorn';
EXEC('ALTER TABLE Employee DROP CONSTRAINT ' + @default_name);

-- Add default constraint on Employee.CityBorn
ALTER TABLE Employee ADD CONSTRAINT df_employee_1 DEFAULT 'SANDNES' FOR CityBorn;
0
tibx