سؤال

في محاولة ترحيل من MSSQL إلى الخلية.هذا المخزنة بروك هو إنشاء الجدول المؤقت لبعض الأعمدة من جدول دائمة ثم استخدام المؤشر إلى تحديث كل السجلات RandNum عمود مع عدد عشوائي ويختار dataset.وأنا أكتب هذا اعتقدت أنني قد تجاوز المؤشر فقط...

SELECT Id, Title, DateStart, Rand() FROM cms_News;

ولكن أنا لا أريد تغيير أي شيء حاد جدا ، لأن الحق الآن أنا فقط أحاول تحويل ديسيبل.سأعود وتحسين هذه الأشياء في وقت لاحق.هنا SP: تحرير: أنا إزالة كافة التعليمات البرمجية من هذا المثال أن له علاقة مع الخطأ.كما رأيت هذا على الانترنت اليوم و يبدو أنني لست الوحيد الذي يعاني هذه المشكلة.الخلية لا يحب جملة من المؤشر الإعلان.أي أفكار ؟

DELIMITER ;//

DROP PROCEDURE IF EXISTS `cms_NewsSelectMainPageNews`;//
CREATE PROCEDURE `cms_NewsSelectMainPageNews`
()
BEGIN
  CREATE TEMPORARY TABLE tempNews
  (
    Id int NOT NULL, 
    Title nvarchar(250),
    DateStart datetime,
    RandNum float NULL
  );

  DECLARE Randomizer CURSOR
      FOR SELECT Id FROM tempNews;
END;//
هل كانت مفيدة؟

المحلول

  REPEAT
    FETCH Randomizer INTO cursor_id;
    IF NOT done THEN
      UPDATE tempNews SET RandNum = rand();
       WHERE id = @cursor_id;
    END IF;
  UNTIL done END REPEAT;

كنت تستخدم unitialized الدورة متغير @cursor_id بدلا من الإجراء-أعلن متغير cursor_id

كتابة على النحو التالي:

  REPEAT
    FETCH Randomizer INTO cursor_id;
    IF NOT done THEN
      UPDATE tempNews SET RandNum = rand();
       WHERE id = cursor_id;
    END IF;
  UNTIL done END REPEAT;

أو حتى أفضل, مجرد الحصول على التخلص من الجدول المؤقت في كل شيء ، كما اقترحت في المقام الأول.


مثل هذا البيان:

ولكن أنا لا أريد تغيير أي شيء حاد جدا ، لأن الحق الآن أنا فقط أحاول تحويل ديسيبل.سأعود وتحسين هذه الأشياء في وقت لاحق.

SQL Server و MySQL هي إلى حد كبير منصات مختلفة.

لقد تغيرت بالفعل كل شيء حاد جدا عندما قررت التبديل.

في معظم الحالات لا يمكنك مجرد نسخ القديم الخاص بك رمز المطرقة إلى MySQL.

فإنه ربما عمل بين عدة إصدارات من SQL Server, منذ على الأقل هناك محاولات للحفاظ على نوع من التوافق بين إصدارات من نفس المنصة ولكن هذا بالتأكيد لن تعمل على ترقية إلى MySQL.

ما أود القيام به هو أن تأخذ كل قطعة من التعليمات البرمجية الخاصة بك وتأكد من أنها تنتج نفس النتائج كما أن القانون القديم لم باستخدام طرق بسيطة يمكن التنبؤ بها قدر الإمكان.

في الحالة الخاصة بك ، @cursor_id متغير يمكن تهيئة في وقت سابق في مدونة لها قيمة يمكن استخدامها من قبل الإجراء المخزن الذي من شأنه أن يؤدي إلى أي نوع من سلوك غير متوقع.

هذا هو لأنه في SQL Server المتغيرات يكون دفعة نطاق ، بينما في MySQL لديهم نطاق الجلسة.

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