NOT NULL Constraint entfernen

11/06/2008 - 16:05 von Marian Aldenhövel | Report spam
Hallo,

Ich habe eine Tabelle definiert als:

CREATE TABLE GAESTE (
ID ...
..
SEX CHAR(1) NOT NULL CHECK(SEX IN('M','W'))
..)

Nun stellt sich heraus, daß es nicht PC ist für jeden Menschen ein
Geschlecht eindeutig festzulegen und zu verlangen :-). Ich würde das
NOT NULL Constraint nun gerne wieder loswerden.

Ich möchte das gerne in SQL hinschreiben, weil dieses SQL Teil eines
Update-Skriptes werden soll das an mehreren Installationen das
Constraint entfernen soll.

ALTER TABLE GAESTE DROP CONSTRAINT JaWasDennNun?

Weil ich dem Constraint keinen expliziten Namen gegeben habe, heißt es
CK__GAESTE__SEX__4711fb3122 wobei das Gekröse da hinten nach Murphy
bestimmt für jede Installation anders ausfàllt oder zumindest anders
ausfallen kann.

Aber es muss weg, denn der Dummbeutel-Ansatz:

ALTER TABLE GAESTE ADD TMP CHAR(1)

UPDATE GAESTE SET TMP=SEX;

ALTER TABLE GAESTE DROP COLUMN SEX;

ALTER TABLE GAESTE ADD SEX Ohne NOT NULL;

UPDATE GAESTE SET SEX=TMP;

ALTER TABLE GAESTE DROP COLUMN TMP;

Scheitert beim DROP der NOT-NULL-definierten Spalte weil das Constraint
noch dran hàngt.

Für ein ALTER COLUMN habe ich die richtige Magie nicht beschwören können,
oder es geht auch nicht.

Letzter Versuch:

DECLARE @cn VARCHAR(50)

SET @cn=(
SELECT CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE (table_name='GAESTE') AND (CONSTRAINT_NAME LIKE 'CK__GAESTE__SEX__%'))

DECLARE @sql NVARCHAR(200)

SET @sql='ALTER TABLE GAESTE DROP CONSTRAINT '+@cn

EXEC sp_executesql @sql

Hat zwar keinen Fehler produziert, aber auch nicht das gewünschte Resultat,
die Spalte bleibt NOT NULL.

Ciao, MM
Marian Aldenhövel, Rosenhain 23, 53123 Bonn
http://www.marian-aldenhoevel.de
"Success is the happy feeling you get between the time you
do something and the time you tell a woman what you did."
 

Lesen sie die antworten

#1 Stefan Hoffmann
11/06/2008 - 16:13 | Warnen spam
hallo Marian,

Marian Aldenhövel schrieb:
SEX CHAR(1) NOT NULL CHECK(SEX IN('M','W'))
Nun stellt sich heraus, daß es nicht PC ist für jeden Menschen ein
Geschlecht eindeutig festzulegen und zu verlangen :-). Ich würde das
NOT NULL Constraint nun gerne wieder loswerden.


Das ist nicht gleichbedeutend mit NULL. NULL heißt keine Angabe. Das ist
ein anderer Wert als z.B. 'U' für Unbekannt/Unentschlossen (wàhle hier
korrekte PC-Value). Wobei wissenschaftlich ein wohl 'H' zu wàhlen ist.

http://www.databasejournal.com/feat...hp/1570801
http://www.dotnetspider.com/resourc...erver.aspx


mfG

Ähnliche fragen