2010-08-11 17 views
0

我有一個表與一對多反身關聯。一對多反身關聯INSERT數據

我需要插入第一個禁用臨時約束的值。 任何想法如何做到這一點?

我使用MS SQL 2008,謝謝你們的支持!

CREATE TABLE dbo.CmsCategories 
    (
     CategoryId  int    NOT NULL IDENTITY (0,1) -- Seed = 0 and Increment= 1 
      CONSTRAINT PK_CmsCategories_CategoryId PRIMARY KEY, 
     ParentOf  int    NOT NULL 
      CONSTRAINT DF_CmsCategories_ParentOf DEFAULT 0 
    ); 
ALTER TABLE dbo.CmsCategories 
ADD CONSTRAINT FK_CmsCategories_ParentOf FOREIGN KEY (ParentOf) REFERENCES dbo.CmsCategories(CategoryId); -- One-to-many Reflexive association 
GO 

    INSERT INTO dbo.CmsCategories 
    (ParentOf) 
    VALUES 
    (0); 
+0

你的約束在哪裏? – garik 2010-08-11 08:06:50

+0

它完美的作品! :) – garik 2010-08-11 08:11:05

+0

抱歉,我忘了添加約束,請看看我的代碼現在更新謝謝 – GibboK 2010-08-11 08:11:47

回答

0

我發現瞭解決方案,告訴我你怎麼看,謝謝!

-- CmsCategories: Disable constraint one-to-many reflexive association to add first row 
    ALTER TABLE dbo.CmsCategories 
    NOCHECK 
    CONSTRAINT 
    FK_CmsCategories_ParentOf; 

    ---- CmsCategories: Insert first row - Root value 
    INSERT INTO dbo.CmsCategories 
    (Title, MetaDescription, MetaKeyword, Summary, IsPublished, ParentOf) 
    VALUES 
    ('Homepage','Homepage','Homepage','Homepage',1,0); 

    -- CmsCategories: Enable constraint one-to-many reflexive association 
    ALTER TABLE dbo.CmsCategories 
    CHECK 
    CONSTRAINT 
    FK_CmsCategories_ParentOf; 
+0

您的表有記錄CategorId = 0 .... ParentOf = 0? – garik 2010-08-11 09:08:51

+0

我想是的,應該用來存儲分類的層次結構數據。 父級0 =我的層次結構的根,這樣所有的子元素都有父根。 – GibboK 2010-08-11 09:27:30