‫۱۰ سال و ۱ ماه قبل، سه‌شنبه ۱۸ شهریور ۱۳۹۳، ساعت ۱۷:۲۴
یک مورد استفاده کاربردی، از رویه sp_MSforeachtable به هنگام تجمیع بانک‌های اطلاعاتی است (برای مثال تجمیع دو DB کوچک در یک DB بزرگتر). برای این منظور می‌توان در ابتدا تمامی Constraint‌های جداول را موقتاً غیر فعال کرد، عملیات Load داده در جداول را انجام داد و مجدداً آنها را فعال نمود.
چنانچه از SSIS Package برای اینکار استفاده شود، با فرض اینکه در مرحله قبل Schema تمامی اشیاء بانک منتقل شده است، Control Flow این Package شامل Step‌های زیر میباشد:
گام اول - غیر فعال کردن تمامی Constraint‌های جداول
برای این منظور از Object موسوم به Execute SQL Task به این صورت استفاده میشود که در بخش SQL Statement دستور زیر نوشته شود:
 exec sp_MSforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
گام دوم - انتقال داده‌ها به شکل Data Only
برای این منظور از Object موسوم به Transfer SQL Server Objects Task به صورت زیر استفاده میشود :
در بخش Object تغییرات زیر اعمال شود:
- در قسمت Destination ، پروپرتی CopyData با مقدار True و ExistingData با مقدار Append تنظیم شود.
- در قسمت Destination Copy & Option ، پروپرتی CopyAllTables در بخش ObjectsToCopy با مقدارTrue تنظیم شود.
 
گام سوم - فعال کردن مجدد Constraint‌های جداول 
برای این منظور از Object موسوم به Execute SQL Task به صورت زیر استفاده میشود :
در بخش SQL Statement دستور زیر نوشته شود:
 exec sp_MSforeachtable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
نکته: در صورت وجود Trigger برای جداول بانک اطلاعاتی نیز می‌توان به همین شکل عمل نمود. (ابتدا آنها را غیر فعال و مجدا فعال کرد)

برای مثال شکل SSIS Package فوق به صورت تصویر فوق است.

‫۱۰ سال و ۵ ماه قبل، جمعه ۵ اردیبهشت ۱۳۹۳، ساعت ۲۰:۱۵
با سلام و سپاس از محبت تان، چند نکته به ذهن من میرسد، که شاید راهگشا باشد:
- تعداد دستورات درون بلاک Transaction تا جایی که میسر است، کمینه باشد.
- عملیات مربوط به وب سرویس، خارج از Transaction انجام گیرد. ( به عنوان یک نکته در کار با Transactionباید عملیات Input و Output خارج از Transaction انجام گیرد.)
- طبیعتا هر چه درجه Isolation بالاتر باشد، Lock سختگیرانه‌تر برخورد می‌کند.
- برای مشکل بن بست، اگر می‌توانید ترتیب در اختیار گرفتن جداول را (پس از شناسائی محل بن بست) تغییر دهید و یا از جداول Temp استفاده کنید.
- چنانچه در قسمت هایی از برنامه همانطور که اشاره کردید فقط نیاز به خواندن مقادیر جداول دارید، از بهینه ساز پرس و جوی nolock استفاده کنید. برای مثال:
select * from tbl with (NOLOCK)