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
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...
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...
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...
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