c# - तालिका पर प्राथमिक कुंजी(डुप्लिकेट कुंजी)का उल्लंघन जहां पीके पहचान है?




sql .net sql-server sql-server-2012 (2)

मेरा सुझाव इन प्रकार के कार्यों को करने के लिए ईटीएल उत्पाद का उपयोग करना है I वे आपके लिए सब कुछ व्यवस्थित करते हैं और सिर्फ एक क्लीनर नौकरी करते हैं थोक copys और संग्रहित प्रक्रियाओं के साथ चारों ओर गड़बड़ और मचान टेबल बनाने (जो मैंने साल के लिए किया) अब मेरे लिए इतनी बदसूरत है

मैं पिछले कुछ वर्षों से पेंटाहो केटल का उपयोग कर रहा हूं और इसके साथ प्यार में पूरी तरह से गिर गया हूं। यह काम मुझे थोड़े समय के लिए, या शायद एक मिनट के तहत लागू करने और लागू करने के लिए, और बड़े पैमाने पर डेटा को बड़े पैमाने पर ढेर में स्थानांतरित करने के लिए अच्छी तरह से चलने / बदलने के सभी भारी भार उठाएगा।

मुझे पता है कि यह आपके प्रश्न का सीधा जवाब नहीं है, लेकिन यह तत्काल बात है, मैं यह सुझाव दे सकता हूं कि कोई इस प्रश्न के साथ मेरे काम पर आया था।

तो मेरे पास यह मेज है:

CREATE TABLE [Snapshots].[Crashproof](
    [EmoteCountId] [int] IDENTITY(1,1) NOT NULL,
    [SnapshotId] [int] NOT NULL,
    [Emote] [nvarchar](42) NOT NULL,
    [EmoteCountTypeId] [int] NOT NULL,
    [Count] [decimal](19, 6) NOT NULL,
    CONSTRAINT [PK_SnapshotsCrashproof] PRIMARY KEY CLUSTERED ([EmoteCountId] ASC) ON [PRIMARY],
    CONSTRAINT [FK_SnapshotsCrashproof_Snapshots] FOREIGN KEY ([SnapshotId]) REFERENCES [Snapshots].[Snapshots] ([SnapshotId]) ON DELETE CASCADE,
    CONSTRAINT [FK_SnapshotsCrashproof_EmoteCountTypes] FOREIGN KEY ([EmoteCountTypeId]) REFERENCES [dbo].[EmoteCountTypes] ([EmoteCountTypeId])
) ON [PRIMARY]
GO

और यह कोड जो इसमें सम्मिलित करता है:

using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.Default, trans))
{
    bulkCopy.DestinationTableName = "Snapshots.Crashproof";
    bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping("SnapshotId", "SnapshotId"));
    bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping("EmoteCountTypeId", "EmoteCountTypeId"));
    bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping("Emote", "Emote"));
    bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping("Count", "Count"));

    using (IDataReader reader = ObjectReader.Create(emoteCountTypesToSnapshot))
    {
        bulkCopy.WriteToServer(reader);
    }
}

यह समय का 99.99% ठीक चलाता है (और थोक प्रति हर मिनट किया जाता है), हालांकि मेरे पास एक बार एक अपवाद था, यह अंतिम पंक्ति पर था ( bulkCopy.WriteToServer(reader); ):

प्राथमिक कुंजी बाधा का उल्लंघन ... वस्तु 'स्नैपशॉट्स। क्रैशप्रूफ' में डुप्लिकेट कुंजी को सम्मिलित नहीं कर सकता। डुप्लिकेट कुंजी मान (247125) है

मुझे लगता है कि अंतिम तालिका में सीधे डालने वाली बल्क की सिफारिश नहीं की जाती है, मैं अपने कोड को एक स्टेजिंग तालिका में बल्क डालने के लिए संशोधित कर दूँगा, फिर वहां से डालें लेकिन क्या यह अपवाद का कारण था?

मैं सच में नहीं समझता कि पहचान फ़ील्ड पर डुप्लिकेट कुंजी कैसे हो सकती है: |


मैंने एवास्ट फाइल सिस्टम शील्ड को अक्षम कर दिया और फिर सभी ने सामान्य काम किया। अवास्ट-सेटिंग व्हील = सक्रिय सुरक्षा- शीर्ष बटन बंद।

परियोजनाओं को प्रकाशित करने के लिए भी आवश्यक है। एक असली दुःस्वप्न





c# sql .net sql-server sql-server-2012