لقد نظرت اليوم إلى جملة الإخراج في SQL Server 2005 بحيث يمكنك إرجاع البيانات إلى متغيرات الجدول من عبارات التعديل (INSERT، UPDATE، DELETE). تتضمن السيناريوهات المفيدة لـ DML مع النتائج التطهير والأرشفة وتطبيقات المراسلة وسيناريوهات أخرى. بناء جملة جملة OUTPUT الجديدة هذه هو:
OUTPUT <dml_select_list> INTO
يمكن لـtable_variable الوصول إلى الصورة القديمة/الجديدة للصف المعدل من خلال الرجوع إلى الجدول المدرج والجدول المحذوف، بطريقة مشابهة للوصول إلى المشغلات. في عبارة INSERT، يمكن الوصول إلى الجدول المدرج فقط. في عبارة DELETE، يمكن الوصول إلى الجداول المحذوفة فقط. في عبارة UPDATE، يمكنك الوصول إلى الجداول المدرجة والجداول المحذوفة. ما يلي هو مثال من MSDN:
كمثال لنظام التطهير والأرشفة الذي قد يكون مفيدًا لـ DML مع النتائج، افترض أن لديك جدول طلبات كبيرًا وتريد إزالة البيانات التاريخية بشكل منتظم. تريد أيضًا نسخ البيانات التي تمت إزالتها إلى جدول أرشيف يسمى OrdersArchive. تقوم بإعلان متغير جدول باسم @DeletedOrders وإدخال حلقة تحذف فيها البيانات التاريخية في أجزاء (على سبيل المثال، الطلبات الأقدم من 2003). الكود المضاف هنا هو جملة OUTPUT، التي تنسخ كافة سمات كافة الصفوف المحذوفة إلى متغير الجدول @DeletedOrders، ثم تستخدم عبارة INSERT INTO لنسخ كافة الصفوف في متغير الجدول إلى جدول OrdersArchive:
DECLARE @DeletedOrders TABLE
(
ترتيب إنت,
تاريخ الطلب التاريخ والوقت,
إمبيدينت,
الوصي فارتشار(5)،
الكميةINT
)
بينما 1=1
يبدأ
ابدأ النقل
حذف أعلى (5000) من الطلبات
تم حذف الإخراج.* INTODeletedOrders
أين تاريخ الطلب <'20030101'
أدخل في أرشيف الطلبات
اختر * من @DeletedOrders
ارتكاب تران
حذف منDeletedOrders
إذا كان @@ عدد الصفوف أقل من 5000
استراحة
END
مثال آخر هو كما يلي إذا كان هناك جدول كما يلي: إنشاء جدول الموظف (EmpID int الهوية (1، 1) قيد المفتاح الأساسي الموظف_pk، الاسم الأول varchar (100)، اسم العائلة Varchar (100)، حرف الجنس (1)، التحية في الحالة عندما يكون الجنس = 'M' ثم 'Mr.' عندما يكون الجنس ='F' ثم 'Ms.' آخر ''، الراتب المالي، الخصومات في الحالة عندما يكون الراتب أقل من 3000 ثم .20 * الراتب عندما يكون الراتب بين 30000 و50000 ثم .26* الراتب عندما يكون الراتب بين 50001 و75000 ثم .30*Salaryelse .35*نهاية الراتب، قيد وقت وتاريخ وزارة العدل DOJ_DEF getdate() الافتراضي)
} جدول بسيط جدًا، حيث يتم استخدام عبارات الحالة لتعيين التحية والخصومات والدوج وما إلى ذلك على التوالي. ويمكننا إنشاء إجراء مخزن آخر، كما يلي: إنشاء إجراء member_insert@Fname varchar(100)،@Lname varchar(100)،@sex char(1)،@Salary Moneyasdeclare @empoutput table (EmpID int, FirstName varchar(100) ، LastName Varchar(100)،Sex char(1)، Salutation char(3)،Salary Money،Deductions Money،DOJ datetime )إدراج في الموظف (الاسم الأول،الاسم الأخير،الراتب،الجنس)تم إدراج OUTPUT.* في @empoutputvalues(@Fname ,@Lname ,@Salary,@sex )اختر * من @empoutput
ثم عند استدعاء الإجراء المخزن، يمكنك استخدام [MyDatabase] مثل هذا
GOexec member_insert 'Miho','Yoshikawa','F',146000
بهذه الطريقة، سيتم إدراج البيانات في جدول الموظفين أثناء التنفيذ، وسيتم تحديد إخراج متغير مؤقت، لاحظ أن هذا يمكن أن يكون على شكل جدول من السهل رؤية ما هو محدد في النموذج هنا، وسيتم إخراج البيانات المدرجة في جدول الموظف إلى متغير empoutput في نفس الوقت، بعد تنفيذ هذا الإجراء المخزن، سنجد النتائج التالية
EmpID، الاسم الأول، الاسم الأخير، الجنس، التحية، الراتب، الخصومات، وزارة العدل
7,ميهو,يوشيكاوا,F,Ms.,146000.00,51100.00,2006-04-09 23:16:44.920
، ويتم بالفعل إدراج السجلات في جدول الموظف
يمكنك رؤية
المصدر: jackyrong BLOG