إدراج/تحديث SQL Server 2005 دون استخدام الإجراءات المخزنة
-
06-07-2019 - |
سؤال
أنا أحاول أن أفعل الكلاسيكية إدراج/تحديث السيناريو حيث كنت بحاجة إلى تحديث الصفوف الموجودة في قاعدة البيانات أو إدراج لهم إذا لم تكن هناك.
لقد وجدت السؤال السابق حول هذا الموضوع, لكنه يتعامل مع الإجراءات المخزنة التي أنا لا تستخدم.أود أن مجرد استخدام عادي SQL SELECT, INSERT و تحديث البيانات ما لم يكن هناك شيء أفضل المتاحة (دمج البيان لا يتوفر في SQL Server 2005).
اعتقد ان الفكرة العامة هي:
If the row is found
update
else
insert
كما لفحص صف وجود كيف مكلفة للقيام SELECT قبل استدعاء تحديث أو إدراج?أم أنه من الأفضل أن مجرد محاولة تحديث التحقق من عدد الصفوف المتأثرة ، ومن ثم القيام إدراج إذا كانت الصفوف المتأثرة 0?
المحلول
والطريقة الأكثر فعالية هو أن تفعل UPDATE
، ثم القيام INSERT
إذا @@rowcount
صفر، <وأ href = "https://stackoverflow.com/questions/108403/solutions-for-insert-or-update-on خادم -sql # 108416 "> كما هو موضح في هذه سابقة الجواب .
نصائح أخرى
(أولا - أنا لن محاولة لتجنب الإجراءات المخزنة ، إذا لم يكن هناك سبب قوي.تعطي فائدة جيدة في معظم الحالات.)
يمكنك أن تفعل ذلك بهذه الطريقة:
- إنشاء (المؤقتة) الجدول
- ملء الصفوف
- تشغيل التداخل الذي يحدد extisting الصفوف
- تحديث الجدول الخاص بك معهم
- تشغيل إلا أن تحدد الصفوف الجديدة
- تشغيل عبارة insert مع هذه العناصر
- قطرة/مسح (المؤقتة) الجدول
هذا ربما سوف تعمل بشكل أسرع إذا كنت إدراج/تحديث كميات كبيرة من الصفوف.
وفهم تماما أن مشاركتك كان بعنوان "SQL خادم 2005" ولكن أردت فقط أن التخلص من شيء لنتطلع إلى إذا / عند الترقية إلى SQL 2008. مايكروسوفت قد أضاف بيان MERGE الجديد الذي سوف تعطيك القدرة على كود بيان DML واحد أن يفعل كل من تحديث وإدراج. انها باردة جدا. لقد قمت حتى الآن لمقارنة الأداء والإدخال / الإخراج ولكن انه لشيء رائع لمجرد الحصول على أداة أخرى في الأدوات الخاصة بك.
إذا كنت دائما الذهاب الى:
* عدد الصفوف
* إدراج / تحديث على أساس نتيجة
لماذا لا بدلا من ذلك:
* حذف صف
* إدراج صف واحد
ونفس النتيجة وإتقانا.
وبقدر ما أعرف عند تحديث صف واحد - سيكلسرفير يقوم حذف / أدخل على أي حال (حيث كان موجودا)