تلقي رسائل خطأ في بناء الجملة عند استخدام النسخ المتماثل للمعاملات في SQL Server 2005


الأعراض


عند استخدام النسخ المتماثل للمعاملات في Microsoft SQL Server 2005، قد تتلقى رسائل الخطأ التالية:
رسالة الخطأ 1
بناء جملة غير صحيح بالقرب ')'. (المصدر: MSSQLServer، رقم الخطأ: 102)

الحصول على تعليمات: http://help/102
رسالة الخطأ 2
بناء جملة غير صحيح بالقرب الكلمة الأساسية 'end'. (المصدر: MSSQLServer، رقم الخطأ: 156)

الحصول على تعليمات: http://help/156
قد تواجه هذه المشكلة في السيناريو التالي اثنين.

السيناريو 1

يحتوي المنشور النسخ المتماثل للمعاملات على مقال تم إنشاؤه استناداً إلى جدول. يحتوي الجدول على مفتاح أساسي الذي تم إنشاؤه على عمود timestamp .

السيناريو 2

يتم إنشاء هذه المادة استناداً إلى جدول. كافة الأعمدة غير أساسي مفتاح الجدول غير قابلة للتحديث. تضمين هذه الأعمدة على الأعمدة التالية:
  • أعمدة التعريف
  • أعمدة الطابع الزمني
  • الأعمدة المحسوبة
بالإضافة إلى ذلك، يمكنك استخدام معالجة لقطة المتزامنة، والنشر منشور معاملات القراءة فقط. على سبيل المثال، يتم إنشاء المقال استناداً إلى الجداول التالية:
  • إنشاء علامة التبويب جدول 1 (المفتاح الأساسي int col1، col2 ك (العمود 1 + 1))
  • إنشاء علامة التبويب جدول 1 (col1 int الأساسية الرئيسية، col2 تعريف عدد صحيح)
  • إنشاء علامة التبويب جدول 1 (col1 int الأساسية الرئيسية، col2 الطابع الزمني)
ملاحظة: تحدث هذه المشكلة عند استخدام النسخ المتماثل في Microsoft SQL Server 2000.

السبب


تحدث هذه المشكلة نظراً لأن "عامل لقطة" إنشاء أمر غير صحيح. ولذلك، لا يمكن تسليم "عامل توزيع" الملفات لقطة.

الحل البديل


الحل البديل للسيناريو 1

لحل هذه المشكلة، تعيين إعداد تحويل الطابع الزمني لثنائي إلى True لهذه المادة. للقيام بذلك، اتبع الخطوات التالية:
  1. على الكمبيوتر الذي يقوم بتشغيل SQL Server 2005، ابدأ Studio إدارة ملقم SQL.
  2. في كائن Explorer، قم بتوسيع الكمبيوتر الذي يحتوي على المنشور، توسيع النسخ المتماثلثم قم بتوسيع المنشورات.
  3. انقر نقراً مزدوجاً فوق اسم المنشور ومن ثم انقر فوق خصائص.
  4. في مربع الحوار خصائص ، انقر فوق المقالات.
  5. حدد مقالة وانقر فوق خصائص المقالةثم انقر فوق تعيين خصائص لتمييز الجدول المقالة. يظهر مربع الحوار خصائص المقالة .
  6. في المقطع تمييز كائن قائمة خصائص تعيين إعداد تحويل الطابع الزمني إلى ثنائي إلى True.
بالإضافة إلى ذلك، قم بتعطيل خيار مخطط 0x08 للتغلب على هذه المشكلة. للقيام بذلك، استخدم إحدى الطرق التالية:
  • عند تشغيل النظام المخزن sp_addarticle إنشاء مقالة ، تعيين المعلمة @schema_option لاستبعاد الخيار المخطط 0x08. لمزيد من المعلومات حول المعلمة @schema_option ، قم بزيارة موقع شبكة مطوري Microsoft (MSDN) التالي على الويب:
  • تشغيل العبارة التالية مقابل قاعدة بيانات المنشور:
    update sysarticles set schema_option = schema_option - (schema_option & 8) * 8  where artid = [<Your_Article_ID>]
ملاحظة: عندما تقوم بتعيين إعداد تحويل الطابع الزمني إلى ثنائي إلى True، السلوك الأساسي هو نفس السلوك الذي يحدث عندما تقوم بتعطيل الخيار المخطط 0x08 .

الحل البديل للسيناريو 2

للتغلب على هذه المشكلة، استخدم إحدى الطرق التالية.

الطريقة الأولى

تغيير المنشور النسخ المتماثل من نفس الوقت معالجة اللقطة لقطة معالجة نونكونكورينت.

ملاحظة: عند استخدام هذا الأسلوب، لا يمكنك تحديث جدول النشر عند إنشاء اللقطة.

للقيام بذلك، قم بتعيين قيمة المعلمة sync_method إلى إحدى القيم التالية عند استدعاء sp_addpublication تخزين الإجراء مباشرة لإضافة المنشور:
  • أصلي
  • حرف
تعيين قيمة للمعلمة sync_method المتزامنة أو concurrent_c.

ملاحظة: لا يمكنك استخدام SQL Server إدارة Studio لتعيين هذه القيمة.

إذا كان لديك بالفعل المنشور، يمكنك تغيير هذا الإعداد بتشغيل قاعدة البيانات المنشور بالبيان التالي:
update syspublications set sync_method = <0 or 1>
ملاحظة: في هذا البيان، < 0 أو 1 > يمثل قيمة المعلمة sync_method . إذا كانت القيمة الأصلية للمعلمة sync_method 3، تغيير القيمة إلى 0. إذا كانت القيمة الأصلية 4، تغيير القيمة إلى 1.

بعد إكمال هذا الإجراء، يجب عليك إنشاء اللقطة. بالإضافة إلى ذلك، يجب تهيئة الاشتراك.

الطريقة الثانية

عند استدعاء الإجراء sp_addarticle تخزين مباشرة لإضافة هذه المادة، استخدام المعايير التالية لتعيين المعلمة @schema_option :
  • إذا كان لديك عمود تعريف يحتوي على مفتاح أساسي، استبعاد خيار مخطط 0x4.
  • إذا كان لديك عمود timestamp لا يحتوي على مفتاح أساسي، استبعاد الخيار المخطط 0x8.
ملاحظة: يوجد أي خيار مخطط المقابلة للأعمدة المحسوبة. ولذلك، لا يطبق هذا الحل للأعمدة المحسوبة.

إذا تم مسبقاً إنشاء المنشور، يمكنك تعطيل مخطط الخيار 0x04 أو مخطط الخيار 0x08مباشرة. للقيام بذلك، قم بتشغيل عبارات SQL للعمليات التالية:
update sysarticles set schema_option = schema_option - (schema_option & 8) * 8  where artid = [<Your_Article_ID>]
update sysarticles set schema_option = schema_option - (schema_option & 4) * 4  where artid = [<Your_Article_ID>]

الطريقة الثالثة

إضافة عمود واحد أو أكثر للتحديث إلى جدول النشر.

الحالة


أقرت Microsoft أن هذه مشكلة في منتجات Microsoft المسردة في قسم "ينطبق على".

مزيد من المعلومات


هذه المشكلة بسبب حدوث تغيير من SQL Server 2000 ب SQL Server 2005. بشكل افتراضي، يتم نسخ عمود timestamp كنوع بيانات ثنائية (8) في SQL Server 2000. في SQL Server 2005، يتم نسخ عمود timestamp مباشرة بشكل افتراضي.

لا يمكن معالجة منطق الإجراء المخصص إنشاء سيناريو عمود timestamp فيها جزء من المفتاح الأساسي عند النسخ المتماثل أعمدة الطابع الزمني في SQL Server 2005. بالإضافة إلى ذلك، لا تعمل النسخ المتماثل للمعاملات بشكل صحيح لأن قيم طابع الوقت مختلفة بين الناشر والمشترك. ومع ذلك، أن النسخ المتماثل للمعاملات قيم المفتاح الأساسي هي نفس الناشر والمشترك.

للجداول التي كافة أعمدة المفاتيح غير أساسي غير قابل للتحديث، يتم إنشاء البرنامج النصي التالي في ملف اللقطة:
UPDATE  <Table Name>  SETWHERE <Search Condition>

لأنه يمكنك تحديث أية أعمدة، لا عبارات تحديث الأعمدة الموجودة بين عبارة SET وبند أين. يؤدي هذا السلوك خطأ في بناء جملة.