2014-09-23 47 views
1

我有這個表:如何獲得指向計算列的外鍵?

CREATE TABLE [dbo].[Question] (
    [QuestionId]  INT    IDENTITY (1, 1) NOT NULL, 
    [Text]    NVARCHAR (4000) NULL, 
    [QuestionUId]  UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL, 
); 

我想創建一個外鍵在我的其他表AdminTestQuestionQuestion錶鏈接QuestionUId回到QuestionUId

引用表'[dbo]。[問題]'不包含與外鍵中的引用列表匹配的主鍵或候選鍵。如果被引用的列是一個計算列,它應該被保留。

任何意見將不勝感激。

+0

由於錯誤提示你需要添加主鍵約束在父表 CREATE TABLE [DBO]。[問題]( [QuestionId] INT IDENTITY(1,1)NOT NULL PRIMARY KEY, [文字] NVARCHAR(4000)NULL, [QuestionUId] UNIQUEIDENTIFIER DEFAULT(newid())NOT NULL, ); – Rishabh 2014-09-23 10:31:06

+1

因爲這實際上是** NOT **一個計算列(只是一個默認的列),所以你需要做的就是使它成爲表的主鍵,或者至少你需要一個唯一的索引('創建唯一索引UIX_QuestionUid ON dbo.Question(QuestionUid)') – 2014-09-23 10:34:47

+0

@marc_s:簡短的註釋*不是關於問題*。 [你的個人資料](http://stackoverflow.com/users/13302/marc-s)在文章「Jon Skeet關於如何寫出一個好問題的有用提示(或至少他的簡短版本)」中包含兩個鏈接,壞了。固定鏈接似乎[this](http://blogs.msmvps.com/jonskeet/2010/08/29/writing-the-perfect-question/)和[this](http://blogs.msmvps.com/ jonskeet /十一分之二千零十二/ 24 /堆棧溢出問題-清單/)。 – Oleg 2014-09-23 10:45:09

回答

2

首先:這是真的不是計算列 - 它只是一個默認的約束規則列...

對於在表中的列用於一個外鍵參考,必須是該表的主關鍵字,或者必須具有其上的唯一索引

所以在這裏,所有你需要做的是在你的專欄

CREATE UNIQUE INDEX UIX_QuestionUid ON dbo.Question(QuestionUid) 

添加唯一索引,然後你應該能夠引用它的外鍵。