Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Spalte eindeutig indizieren und NULL Wert zulassen

70 views
Skip to first unread message

Markus Oberle

unread,
Apr 4, 2003, 1:45:50 AM4/4/03
to
Hallo zusammen

Ich versuche eine Spalte in einer SQL DB eindeutig zu indizieren.
D.h. wenn ein Wert hinein geschrieben wird muss er eindeutig sein,
andernfalls ist das Feld leer. Dies führt wegen dem NULL Wert
allerdings zu Fehlern.
Kann mir jemand weiterhelfen?

Für Hilfe bedanke ich mich im Voraus.
Gruss Markus Oberle


Markus Tristl (MS)

unread,
Apr 4, 2003, 3:04:48 AM4/4/03
to
Hallo Markus,

solltest Du nur einen NULL Wert in der Spalte haben, dann sollte ein 'Unique
Index' möglich sein. Nur ein Primary Key erlaubt keine NULL Eigenschaft der
Spalte.
Bei mehreren NULL Werten enthält die Spalte natürlich keine eindeutigen
Werte mehr.

Hoffe das hilft.

Viele Grüße

Markus Tristl
Microsoft SQL Server Support

"Die Inhalte der in dieser Newsgroup eingestellten Nachrichten stammen von
Dritten. Microsoft kann daher für die Richtigkeit und Vollständigkeit der
Inhalte keine Haftung übernehmen."

"Markus Oberle" <markus...@pmi.ag> wrote in message
news:ukobbXn#CHA....@TK2MSFTNGP12.phx.gbl...

Markus Oberle

unread,
Apr 4, 2003, 3:30:59 AM4/4/03
to
Hallo Markus

Gibt es denn eine Möglichkeit, Einträge eindeutig zu indizieren und trotzdem
mehrere
NULL Werte zuzulassen?

Gruss Markus Oberle

"Markus Tristl (MS)" <mar...@online.microsoft.com> schrieb im Newsbeitrag
news:#tIfeDo#CHA....@TK2MSFTNGP10.phx.gbl...

Markus Tristl (MS)

unread,
Apr 4, 2003, 3:59:18 AM4/4/03
to
Hallo Markus,

nein, das widerspricht ja dann der Eindeutigkeit....
Vielleicht hilft ja z.B. ein Kombination als eindeutiger Schlüssel weiter
oder Verwendung eines 'Platzhalters' für die NULL Werte der als Default
generiert wird, sich von den eindeutigen Werten unterscheidet, aber trotzdem
unique ist?

Viele Grüße

Markus Tristl
Microsoft SQL Server Support

"Die Inhalte der in dieser Newsgroup eingestellten Nachrichten stammen von
Dritten. Microsoft kann daher für die Richtigkeit und Vollständigkeit der
Inhalte keine Haftung übernehmen."

"Markus Oberle" <markus...@pmi.ag> wrote in message

news:emhzUSo#CHA....@TK2MSFTNGP11.phx.gbl...

Hannes Brunner

unread,
Apr 4, 2003, 5:22:38 AM4/4/03
to
Hallo Markus

Markus Oberle schrieb:


> Hallo Markus
>
> Gibt es denn eine Möglichkeit, Einträge eindeutig zu indizieren und trotzdem
> mehrere
> NULL Werte zuzulassen?

Da kenn ich zwei Varianten:

1. Die Eindeutigkeit mittels Trigger sicherstellen

2. Eine indizierte Sicht verwenden.

Beispiel für 2:

---------------------------------------

USE tempdb
GO

CREATE TABLE t1(x int NULL)
GO

CREATE VIEW v1
WITH SCHEMABINDING
AS
SELECT x
FROM dbo.t1
WHERE x IS NOT NULL
GO

CREATE UNIQUE CLUSTERED INDEX PK_v1
ON v1(x)
GO

INSERT INTO t1
SELECT 1 UNION ALL
SELECT 2 UNION ALL
SELECT Null UNION ALL
SELECT Null
SELECT x FROM t1
GO

INSERT INTO t1
SELECT 1
SELECT x FROM t1
GO

DROP VIEW v1
GO

DROP TABLE t1
GO

---------------------------------------

(4 row(s) affected)

x
-----------
1
2
NULL
NULL

(4 row(s) affected)

Server: Nachr.-Nr. 2601, Schweregrad 14, Status 3, Zeile 1
Eine Zeile mit doppeltem Schlüssel kann in das v1-Objekt mit dem
eindeutigen PK_v1-Index nicht eingefügt werden.
Die Anweisung wurde beendet.
x
-----------
1
2
NULL
NULL

(4 row(s) affected)

---------------------------------------

Nachteil von Lösung 2. ist sicherlich, dass zusätzlicher Speicherbedarf
für die Daten der indizierten Sicht anfällt; dafür ist diese Lösung IMHO
eleganter. Was die Performance anbelangt ist wohl eine genauere
Untersuchung notwendig ...

HTH
Hannes

0 new messages