2009-09-01 5 views
24

Wie ändern Sie eine Spalte, um den Standardwert zu entfernen?Wie lässt man einen Standardwert aus einer Spalte in einer Tabelle fallen?

Die Säule wurde mit erstellt:

ALTER table sometable Add somecolumn nchar(1) NOT NULL DEFAULT 'N' 

Und dann verändert mit:

alter table sometable alter column somecolumn nchar(1) null 

Das nulls, aber der Standardwert bleibt erlaubt. Wie können Sie es entfernen?

+0

möglich Duplikat von [Wie lässt man einen Standardwert oder eine ähnliche Einschränkung in T-SQL fallen?] (Http://stackoverflow.com/questions/1123060/how-do-you-drop-a-default-value- oder-ähnliche-constraint-in-t-sql) –

+0

jede Chance auf eine VTC von Ihnen? –

+0

@RubenBartelink, die Antworten gibt es die halbe Lösung.Wenn ein Mods verschmelzen will, stört es mich nicht, aber meine Antwort unten geht eigentlich ans Ende des Weglassens der Einschränkung, anstatt nur den Namen zu entdecken. – Yishai

Antwort

28

Es ist eine Standardeinschränkung, müssen Sie ein ausführen:

ALTER TABLE 
DROP CONSTRAINT ConstraintName 

Wenn Sie keinen Namen angegeben haben, wenn Sie die Einschränkung erstellt, dann erstellt SQL Server für Sie. Sie können SQL Server Management Studio verwenden, um nach dem Namen der Integritätsregel zu suchen, indem Sie zur Tabelle navigieren, dessen Strukturknoten öffnen und dann den Knoten Abhängigkeiten öffnen.

Wenn ich mich richtig erinnere, wird die Einschränkung etwas in der Form von DF_SomeStuff_ColumnName genannt.

EDIT: Josh W.'s Antwort enthält einen Link zu einer SO question, die Ihnen zeigt, wie Sie den automatisch generierten Constraint-Namen mithilfe von SQL finden, anstatt die Management Studio-Schnittstelle zu verwenden.

10

Das ist, was ich kam mit (vor Antwort Josh W. sah, sah ich es wirklich gut, aber es abgeschöpft ich es so schnell falsch verstanden):

declare @name nvarchar(100) 
select @name = [name] from sys.objects where type = 'D' and parent_object_id = object_id('sometable') 

if (@name is not null) 
    begin 
    exec ('alter table [sometable] drop constraint [' + @name +']') 
    end 

Der Vorteil, den ich hier habe ist, dass ich weiß, dass es nur eine solche Einschränkung für die ganze Tabelle gibt. Wenn es zwei gewesen wäre, naja, ich schätze, deshalb sollten Sie sie benennen;).

(Die Probleme ist, dass dies eine Änderung zu 10 verschiedenen Kundendatenbanken gemacht ist, so gibt es nicht einen konsistenten Namen in einem Skript zu setzen)

+0

Ja, das wird ein Problem für jede große Datenbank-Rollout. Am Ende müssen Sie sich zwingen, Ihre Einschränkungen immer so zu benennen, dass sie in allen Umgebungen konsistent sind. Beispiel: ALTER Tabelle someable Add somecolumn nchar (1) NOT NULL CONSTRAINT DF_TableName_SomeColumn DEFAULT 'N' –

+1

Ich glaube, Ihre Lösung wird nicht auf einer Tabelle mit mehreren Standardwerten arbeiten, wird die letzte – AaA

+0

entfernen Wenn die Tabelle einige hat zwingt zu verschiedenen Spalten ist es notwendig, nach dem Spaltennamen filtern: 'erklären @name nvarchar (100) select * from sys.objects o sys.columns auf o.object_id = col.default_object_id col verbinden, in dem type = 'D' und parent_object_id = object_id ('tablename') und col.name = 'columnname'' – MirrorBoy

4
select name from sys.default_constraints where name like '%first_3_chars_of_field_name%' 

Ihre Constraint Finden und DROP CONSTRAINT verwenden zu fallen es. Oder führen Sie eine Cursor/while-Schleife aus, um alle ähnlichen Standardwerte in der Datenbank zu löschen.

+0

Es funktioniert nicht, weil meine Constrains einen Namen wie' DF_tableName_someLetters 'haben – MirrorBoy

0
alter table <tablename> drop constraint <constraintname> 

Wenn Sie den Namen der Einschränkung nicht kennen, können Sie sql server manangement studio verwenden, um den Namen der Einschränkung zu überprüfen .... hoffe, das hilft.

0

Wenn Sie SQL Server Management Studio verwenden, ist dies ziemlich einfach.

Wenn mehrere Einschränkungen mit der Tabelle verknüpft sind und Sie nicht alle löschen möchten, klicken Sie mit der rechten Maustaste auf die Abhängigkeit und wählen Sie "Script Cnstraint as -> CREATE to -> New Query Editor Window". Dies zeigt Ihnen den Code, der die Einschränkung erstellt hat, einschließlich des Spaltennamens und des Standardwerts.

Klicken Sie dann mit der rechten Maustaste auf die Einschränkung, die Sie löschen möchten, und wählen Sie Löschen.

Verwandte Themen