473 Stimmen

So legen Sie einen Standardwert für eine vorhandene Spalte fest

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?

1 Stimmen

Was haben Sie in MSDN ALTER TABLE gelesen...? msdn.microsoft.com/de-us/library/ms187742(SQL.90).aspx

2 Stimmen

0 Stimmen

700voto

Yuck Punkte 46967

Dies funktioniert in SQL Server:

ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;

79 Stimmen

+1 zur Angabe eines Constraint-Namens, damit SQL Server keinen zufälligen Namen erstellt.

50 Stimmen

MSSQL ist seltsam, wenn es Standardwerte als "Beschränkungen" bezeichnet. Wenn überhaupt, sind sie Entspannungen die gegenüber einer Einschränkung! Sie machen mehr Dinge gültig, nicht weniger.

4 Stimmen

Es ist nicht seltsam, wenn Sie in einer alternativen Weise wie denken: Die Standardeinschränkung verhindert, dass MSSQL einen Fehler ausgibt, wenn Sie die Spalte nicht angeben. Es ist also keine Einschränkung für den Benutzer, sondern eine Einschränkung für MSSQL.

210voto

hoodaticus Punkte 3621
ALTER TABLE Employee ADD DEFAULT 'SANDNES' FOR CityBorn

4 Stimmen

Das funktioniert in MSSQL, hat aber den Nachteil, dass es die Einschränkung, die es im Hintergrund erstellt, nicht benennt (siehe die höher gestimmte Antwort oben).

13 Stimmen

@Contango Ich denke, es ist besser, sich nicht die Mühe zu machen, jede einzelne Einschränkung zu benennen, für den Fall, dass Sie eine von ihnen ändern müssen. Schreiben Sie einfach eine Verfahren zum Weglassen automatisch benannter Beschränkungen und Sie müssen nie wieder einen Namen nennen + können mit all den anderen unbenannten umgehen

3 Stimmen

@Jonny Leeds. Guter Punkt. Ich benenne auch gerne die Constraints, da dies eine gute Dokumentation für alle anderen ist, die versuchen, das Datenbankschema zu ändern (oder einfach nur zu verstehen). Das ist weniger wichtig, wenn man als Einzelkämpfer in einem Team von einem arbeitet.

76voto

Carlos Quintanilla Punkte 12057

Sie können dafür nicht alter column verwenden, sondern add

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

13 Stimmen

Ich weiß nicht, warum diese Antwort nicht hochgestuft wird. Es ist genau das gleiche wie die vorherige und wurde früher beantwortet...

40voto

user3310402 Punkte 425

Die korrekte Vorgehensweise ist wie folgt:

  1. Führen Sie den Befehl aus:

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

  3. Lassen Sie die DEFAULT CONSTRAINT :

    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]

6 Stimmen

StackOverflow.com ist nur in englischer Sprache verfügbar. Die portugiesische Seite ist pt.stackoverflow.com

1 Stimmen

Dies fügt den anderen Antworten nichts Neues hinzu, ist eine manuelle Methode - kann nicht geskriptet werden, und es wird als "der richtige Weg" angegeben.

14voto

Dave Punkte 2667

Die Lösung von Hoodaticus war perfekt, vielen Dank, aber ich brauchte es auch, um es wiederaufrufbar zu machen und fand diesen Weg, um zu überprüfen, ob es getan wurde...

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X