التحقق من وجود صف قبل إجراء تحديد (SQL Server)
-
30-09-2019 - |
سؤال
لدي بيان 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
حسب جو جو ستيفانيلي.