2011-11-19 14 views
15
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 तालिका के विवरण की जांच बाधा "PaymentCheck" के साथ विरोध हुआ। संघर्ष "एमईआरपी" डेटाबेस में हुआ, तालिका "कुरी। भुगतान"। त्रुटि के रूप में स्पष्ट रूप से बताया

तालिका संरचना इस

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] 
+0

मुझे लगता है कि या तो 'kuri_Cust_ID' तालिका में एक आईएनटी नहीं है, या' amt' दशमलव (या दोनों) नहीं है। – GolezTrol

+0

@marc_s बहुत धन्यवाद यह काम किया! –

उत्तर

22

की तरह है: आपकी तालिका में पंक्तियों कि का उल्लंघन अपना चेक बाधा हैं।

kuri.fnGetAge(kuri_Cust_ID,amt) >= 1, आप इस चेक बाधा का उल्लंघन करते हुए उन पंक्तियों को पा सकते हैं के लिए आपका चेक बाधा परीक्षण के बाद से

का उपयोग कर

SELECT * FROM Kuri.Payment 
    WHERE kuri.fnGetAge(kuri_Cust_ID, amt) < 1 

फिक्स या उन पंक्तियों को हटाने के बाद आप ठीक होना चाहिए और अपने ALTER TABLE आदेश काम करना चाहिए

+10

मैं कहूंगा कि marc_s वर्णन करता है कि यह स्पष्ट है। ऐप द्वारा प्रदान किया गया त्रुटि संदेश स्पष्ट नहीं है। यह नहीं बताता है कि मौजूदा तालिका में डेटा प्रयास किए गए बाधा के अतिरिक्त उल्लंघन का उल्लंघन करता है। अगर मुझे संदेह था कि मैं या मूल पोस्टर को उत्तर खोजने के लिए जरूरी था। लेकिन स्पष्टीकरण के लिए मार्क_एस धन्यवाद, कोई भी कम नहीं। – teaman

संबंधित मुद्दे