سؤال

لدي بيان SQL أود تعديله. كما هو الحال الآن ، أقوم بتشغيل SELECT SELECT SELECT ، لكنني أود تعديله ، لذا يتم إلحاق السجلات التي لا توجد في جدول الوجهة (كما هو محدد وفقًا لمعاييري).

هذا هو بياني الأولي:

SELECT b.BallotID, m.MeetingDate
    INTO StagingTable
    FROM Ballot INNER JOIN Meeting on b.MeetingID = m.MeetingID
    WHERE b.LastModifiedDate < '01-01-2010' AND ( b.BallotType = 'Agenda Vote' AND m.MeetingDate < GETDATE())  

أرغب في تغيير الأشياء بحيث لا يتم ملؤها إلا عندما لا يكون الاقتراع موجودًا بالفعل. هل هذه طريقة مقبولة للقيام بذلك ، أم أن هناك بدائل أفضل؟

SELECT b.BallotID, m.MeetingDate
    INTO StagingTable
    FROM Ballot INNER JOIN Meeting on b.MeetingID = m.MeetingID
    WHERE b.LastModifiedDate < '01-01-2010' AND ( b.BallotType = 'Agenda Vote' AND m.MeetingDate < GETDATE())   
    AND NOT EXISTS(SELECT 1 from StagingTable where BallotID = b.BallotID)) )
هل كانت مفيدة؟

المحلول

تقنيةك تبدو جيدة إلا أن حدد ... في يتم استخدام بناء الجملة لإنشاء جدول جديد. بدلاً من ذلك ، تريد استخدام الكود أدناه لإضافة صفوف إلى جدول موجود:

INSERT INTO StagingTable
    (BallotID, MeetingDate)
    SELECT b.BallotID, m.MeetingDate
        FROM Ballot b
            INNER JOIN Meeting m
                on b.MeetingID = m.MeetingID
        WHERE b.LastModifiedDate < '01-01-2010' 
            AND (b.BallotType = 'Agenda Vote' AND m.MeetingDate < GETDATE())   
            AND NOT EXISTS(SELECT 1 from StagingTable where BallotID = b.BallotID)

نصائح أخرى

SELECT INTO ينشئ جدول جديد بدلاً من إدراج البيانات في جدول موجود. ولهذا السبب ، سأتحقق مما إذا كان الجدول موجودًا إذا قام بإسقاط الجدول قبل تشغيل SQL الحالي. الإرادة تضمن أن يتم إسقاط عملية الترحيل وإعادة إنشائها في كل مرة.

    IF OBJECT_ID('StagingTable','U') IS NOT NULL
    BEGIN
         DROP TABLE StagingTable
    END


        SELECT b.BallotID, m.MeetingDate
        INTO StagingTable
        FROM Ballot INNER JOIN Meeting on b.MeetingID = m.MeetingID
        WHERE b.LastModifiedDate < '01-01-2010' AND ( b.BallotType = 'Agenda Vote' 
        AND m.MeetingDate < GETDATE()) 

إذا كنت ترغب في إضافة صفوف إلى الجدول الحالي ، فيجب عليك استخدامها INSERT INTO حسب جو جو ستيفانيلي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top