2015-05-27 78 views
0

我不確定以下SQL有什麼問題。 我曾經有一個基於customer_reference_no的主鍵。 他們現在有一些重複的東西,所以我創建了一個名爲uniquePoint的列,它是customer_no,customer_reference_no和stop_zip的組合。Azure上的SQL - 使用計算列作爲主鍵索引

以下工作正常:

CREATE TABLE [dbo].[stop_address_details] (
[customer_no]    NCHAR (5) NOT NULL, 
[customer_reference_no]  VARCHAR (20) NOT NULL, 
[stop_name]     VARCHAR (40) NOT NULL, 
[stop_address]    VARCHAR (40) NULL, 
[stop_city]     VARCHAR (30) NULL, 
[stop_state]     CHAR (2)  NULL, 
[stop_zip]     VARCHAR (10) NULL, 
[point_no]     VARCHAR (20) NULL, 
[branch_id]     VARCHAR (6) NULL, 
[delivery_route]    VARCHAR (10) NULL, 
[dateTimeCreated]   DATETIME  NULL, 
[dateTimeUpdated]   DATETIME  NULL, 
[estimated_delivery_time] TIME (0)  NULL, 
[est_del_time]    DATETIME  NULL, 
[dateTimeLastUsedInDatatrac] DATETIME  NULL, 
[uniquePoint] as customer_no + '_' + customer_reference_no + '_' + stop_zip PERSISTED , 
CONSTRAINT [AK_stop_address_details_customer_reference_no] UNIQUE NONCLUSTERED ([customer_reference_no] ASC), 
CONSTRAINT [PK_stop_address_details] PRIMARY KEY ([uniquePoint]) 

但是當我刪除約束的customer_reference_no我得到以下錯誤: SQL71516 ::被引用的表 '[DBO] [stop_address_details]' 不包含主要或與外鍵中引用列表匹配的候選鍵。如果被引用的列是一個計算列,它應該被保留。

我正在引用計算列,並且它是持久的。

不確定缺少什麼?

謝謝

回答

1

答案似乎是,我有一個引用此表的外鍵的另一個表:

REATE TABLE [dbo].[rep_assigned_stop_matrix] (
[customer_reference_no] VARCHAR (20) NOT NULL, 
[rep_id]    INT   NULL, 
[dateTimeCreated]  DATETIME  NULL, 
[sendSMS]    BIT   NULL, 
[sendEmail]    BIT   NULL, 
[id]     INT   IDENTITY (1, 1) NOT NULL, 
CONSTRAINT [PK_rep_assigned_stop_matrix] PRIMARY KEY CLUSTERED ([id] ASC), 
CONSTRAINT [AK_rep_assigned_stop_matrix_Column] UNIQUE NONCLUSTERED ([customer_reference_no] ASC, [rep_id] ASC), 
CONSTRAINT [FK_pod_update_lookup_rep_info] FOREIGN KEY ([rep_id]) REFERENCES [dbo].[rep_info] ([id]) ON DELETE CASCADE, 
CONSTRAINT [FK_lookup_Stop_Details] FOREIGN KEY ([customer_reference_no]) REFERENCES [dbo].[stop_address_details] ([customer_reference_no]) 

);

當這個底部約束被刪除時,錯誤消失了。我不明白的是爲什麼錯誤信息沒有更清楚(這意味着命名rep_assigned_stop_matrix表) - 或者我還錯過了什麼?

Joe

0

看來你的 '[DBO]。[stop_address_details]' 仍然指customer_reference_no列。嘗試使用新列名稱刪除並重新添加它。