【问题标题】:The ALTER TABLE statement conflictedALTER TABLE 语句冲突
【发布时间】:2011-11-19 08:33:53
【问题描述】:
alter FUNCTION [Kuri].[fnGetAge](@kuri_cust_Id int,@amt decimal)
RETURNS SMALLINT
AS
    BEGIN
    DECLARE @isVallid  bit = 0
    declare @payed decimal(14,2)
    declare @totaltillnow decimal(14,2)
    select @payed = isnull(SUM(Payment.amt),0)  from Kuri.Payment where Payment.Kuri_Cust_ID = @kuri_Cust_id
    select @totaltillnow = isnull(SUM(NextLotAmount),0) from Kuri.Kuri_GivenDetails
    inner join Kuri.kuri_Customer  
    on Kuri_GivenDetails.kuri_Id  = kuri_Customer.kuri_ID 
     where kuri_Customer.kuri_Cust_id =  @kuri_Cust_id
     if((@payed + @amt) < @totaltillnow)
        set @isVallid = 1
        RETURN @isVallid
    END;
GO

ALTER TABLE [Kuri].[Payment]  WITH CHECK ADD  CONSTRAINT PaymentCheck CHECK (kuri.fnGetAge(kuri_Cust_ID,amt) >= 1 )
GO

错误:

ALTER TABLE 语句与 CHECK 约束冲突 “付款检查”。数据库“MERP”中发生冲突,表 “Kuri.Payment”。

表结构是这样的

CREATE TABLE [Kuri].[Payment](
    [payment_ID] [int] IDENTITY(1,1) NOT NULL,
    [payment_Date] [date] NOT NULL,
    [bill_No] [nvarchar](25) NOT NULL,
    [Kuri_Cust_ID] [int] NOT NULL,
    [vr_ID] [int] NOT NULL,
    [amt] [decimal](14, 2) NULL,
    [created_ID] [int] NULL,
    [created_Date] [datetime] NULL,
    [modified_ID] [int] NULL,
    [modified_Date] [datetime] NULL,
    [authorized_ID] [int] NULL,
    [authorized_Date] [datetime] NULL,
  CONSTRAINT [PK_Payment] PRIMARY KEY CLUSTERED 
  ([payment_ID] ASC)

 ALTER TABLE [Kuri].[Payment]  WITH CHECK ADD  CONSTRAINT [FK_Payment_kuri_Customer] FOREIGN KEY([Kuri_Cust_ID])
 REFERENCES [Kuri].[kuri_Customer] ([Kuri_Cust_ID])

 ALTER TABLE [Kuri].[Payment] CHECK CONSTRAINT [FK_Payment_kuri_Customer]

【问题讨论】:

  • 我认为kuri_Cust_ID 不是表中的 INT,或者amt 不是小数(或两者兼有)。
  • @marc_s 非常感谢它的工作!

标签: sql sql-server-2008


【解决方案1】:

正如错误明确指出的那样:您的表中有行违反您的检查约束。

由于您对kuri.fnGetAge(kuri_Cust_ID,amt) &gt;= 1 进行了检查约束测试, 您可以使用

找到违反此检查约束的那些行
  SELECT * FROM Kuri.Payment
  WHERE kuri.fnGetAge(kuri_Cust_ID, amt) < 1

修复或删除这些行,然后你应该没问题,你的 ALTER TABLE 命令应该可以工作

【讨论】:

  • 我想说 marc_s 描述它的方式很清楚。该应用程序提供的错误消息不清楚。它没有说明现有表中的数据违反了尝试添加的约束。如果有的话,我怀疑我或原始海报是否需要寻找答案。不过,感谢 Marc_s 的澄清。
猜你喜欢
  • 1970-01-01
  • 2014-03-17
  • 1970-01-01
  • 2014-01-19
  • 1970-01-01
  • 2019-01-02
  • 2013-01-26
相关资源
最近更新 更多