【问题标题】:SQL on Azure - using a computed column as a primary key indexAzure 上的 SQL - 使用计算列作为主键索引
【发布时间】:2015-05-28 03:44:01
【问题描述】:

我不确定下面的 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 :: 被引用的表 '[dbo].[stop_address_details]' 不包含与外键中的引用列列表匹配的主键或候选键。如果引用的列是计算列,它应该被持久化。

我正在引用计算列并且它被持久化了。

不确定缺少什么?

谢谢,

【问题讨论】:

    标签: sql azure azure-sql-database


    【解决方案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 表)——还是我仍然遗漏了什么?

    【讨论】:

      【解决方案2】:

      您的 '[dbo].[stop_address_details]' 似乎仍在引用 customer_reference_no 列。尝试删除并使用新的列名重新添加它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-05
        • 2017-08-07
        • 2010-11-22
        • 2013-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-29
        相关资源
        最近更新 更多