قم بتشغيل العديد من commans أو SQL البرنامج النصي باستخدام OLE DB في SQL Server

StackOverflow https://stackoverflow.com/questions/3127294

سؤال

من الممكن تشغيل أوامر متعددة أو نص SQL باستخدام OLE DB؟ على سبيل المثال لتشغيل البرنامج النصي SQL لإنشاء قاعدة بيانات وهيكله (الجداول ، الفهارس ، الإجراءات المخزنة ...).

عندما أستخدم فئة CCommand ، يمكنني تشغيل أمر واحد فقط. كيف يمكنني تشغيل البرنامج النصي SQL بأوامر متعددة؟

شكرا ، مارتن

هل كانت مفيدة؟

المحلول

مارتن - لقد واجهت نفس القضية. أفترض أنه عندما تقوم بتحميل برنامج نصي مع واحد أو أكثر "اذهب" فيه ستحصل على خطأ؟

لقد استخدمت SQL DMO في الماضي لتشغيل البرامج النصية مع الذهاب إليها. هذا يتطلب تثبيت SQLDMO على الكمبيوتر المستهدف.

خيار آخر هو استخدام وظيفة .NET "String.split (" GO ")" ، وحلق المجموعة الناتجة من الأوتار ، وينزعها واحدًا تلو الآخر.

مثله:

StreamReader file = File.OpenText("c:\\MyScript.sql");
SqlConnection conn = new SqlConnection("My connection string here...");
string fullCommand = file.ReadToEnd();
string[] splitOptions = new string[] {"go", "GO", "gO", "Go" };
foreach (string individualCommand in fullCommand.Split(splitOptions, StringSplitOptions.RemoveEmptyEntries))
{
    SqlCommand comm = new SqlCommand(individualCommand, conn);
    comm.ExecuteNonQuery();
}

إخلاء المسئولية: لم أختبر الكود أعلاه ، لكن يجب أن يعطيك فكرة عما هو مطلوب :-)

نصائح أخرى

أمر GO الذي يفصل عبارات TSQL ليس أمر SQL ، ولكن عبارة معترف بها في الواجهة الأمامية فقط.

لذلك تحتاج إلى تقسيم البرنامج النصي بشكل صريح إلى عدة أوامر في " ngo" قبل نقل النتيجة إلى كائن الأمر.

لقد أرسلت عبارات متعددة مثل الإدراج في ؛ إدراج في (غير مطلوبة في SQL Server.

يجب أن تكون بعض العبارات (مثل Create Function) هي البيان الأول في "دفعة". في SSMS و SQLCMD ، لديك فاصل GO ، وهو أداة من جانب العميل لفصل الدفعات. هذه ليست ميزة OLEDB ، لذلك يجب عليك إرسالها بشكل منفصل - في استدعاء منفصل في سلسلة أو موازٍ (اعتمادًا على ما إذا كان يمكن تشغيل عملياتك في وقت واحد).

إذا تمكنت من الابتعاد عن CCommand ، أعتقد أنه يمكنك تشغيل SQLCMD ، لأنه يدعم فواصل الدُفعات GO.

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