SQL on Azure - 使用计算列作为主键索引
SQL on Azure - using a computed column as a primary key index
我不确定下面的内容有什么问题SQL。
我曾经有一个基于 customer_reference_no 的主键。
他们现在有一些重复项,所以我创建了一个名为 uniquePoint 的列,它是 customer_no、customer_reference_no 和 stop_zip.
的组合
以下工作正常:
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 :: 引用的 table '[dbo].[stop_address_details]' 不包含与外键中的引用列列表匹配的主键或候选键。如果引用的列是计算列,则应该持久化。
我正在引用计算列并且它是持久化的。
不确定缺少什么?
谢谢,
乔
您的“[dbo].[stop_address_details]”似乎仍在引用 customer_reference_no 列。尝试删除并使用新的列名称重新添加它。
答案似乎是我有另一个 table 用外键引用这个 table:
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 table)——还是我还遗漏了什么?
乔
我不确定下面的内容有什么问题SQL。 我曾经有一个基于 customer_reference_no 的主键。 他们现在有一些重复项,所以我创建了一个名为 uniquePoint 的列,它是 customer_no、customer_reference_no 和 stop_zip.
的组合以下工作正常:
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 :: 引用的 table '[dbo].[stop_address_details]' 不包含与外键中的引用列列表匹配的主键或候选键。如果引用的列是计算列,则应该持久化。
我正在引用计算列并且它是持久化的。
不确定缺少什么?
谢谢,
乔
您的“[dbo].[stop_address_details]”似乎仍在引用 customer_reference_no 列。尝试删除并使用新的列名称重新添加它。
答案似乎是我有另一个 table 用外键引用这个 table:
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 table)——还是我还遗漏了什么?
乔