2010-11-26 5 views
0

J'essaie de déterminer comment dans SQL Server pour créer une table qui a une colonne qui peut être nulle ou avoir une valeur. S'il a une valeur, il doit être contraint à une clé primaire existante dans la table, à l'exception de la ligne dans laquelle la valeur est stockée.SQL Server - Colonne contrainte dans une table à la clé primaire OU null dans la même table

Ai-je besoin d'une contrainte de vérification? Si oui, quelle est l'expression?

La raison en est que les objets de la table peuvent être des enfants d'autres tables. Idéalement, je préfère faire cela sans table de correspondance.

Le nom de la clé primaire est 'id'.

La colonne que j'essaie de contraindre est 'parentId'. parentId peut être NULL OU se référer à un identifiant valide pour une autre ligne de la table.

Répondre

1

Ce que vous devez faire ici est de créer une relation de clé étrangère avec la même table, pour l'exemple:

CREATE TABLE [dbo].[Category](
    [ID] [int] IDENTITY(1,1) NOT NULL, 
    [CategoryName] [nvarchar](150) NOT NULL, 
    [ParentCategoryID] [int] NULL, 
CONSTRAINT [PK_tblCategory] PRIMARY KEY CLUSTERED 
([ID] ASC)) 
GO 

ALTER TABLE [dbo].[Category] WITH CHECK ADD CONSTRAINT [FK_tblCategory_tblCategory] 
FOREIGN KEY([ParentCategoryID]) REFERENCES [dbo].[Category] ([ID]) 
GO 

ALTER TABLE [dbo].[Category] CHECK CONSTRAINT [FK_tblCategory_tblCategory] 
GO 
+0

Vive. Les exigences ont changé et maintenant chaque élément doit avoir un ou plusieurs parents, c'est-à-dire qu'il peut apparaître plus d'une fois dans l'espace de noms. Cela résout la question initiale. – Sam

+0

Je dois aimer quand ces exigences changent! Les nouvelles exigences signifient que cette relation a juste une tonne plus facile à gérer, bonne chance! – JonVD