it-swarm.asia

تغيير طول varchar على المنضدة الحية

لدي خادم MS SQL Server 2008 R2 DB قيد الاستخدام حاليًا مع تطبيق إنتاج.

يتطلب التحسين الجديد للتطبيق الآن زيادة طول العمود varchar(100) في الجدول.

هل يمكن زيادة طول هذا العمود الموجود في قاعدة بيانات المنتج دون التأثير على البيانات الحالية؟

هل يجب إتمام هذا التغيير خلال ساعات العمل لتجنب انقطاع الخدمة؟

26
anataliocs

إذا كنت تزيده إلى varchar(100 - 8000) (أي أي شيء آخر بخلاف varchar(max)) وأنت تقوم بذلك من خلال TSQL بدلاً من SSMS GUI

ALTER TABLE YourTable ALTER COLUMN YourCol varchar(200) [NOT] NULL

وعدم تبديل إبطال العمود من NULL إلى NOT NULL (والتي ستغلق الجدول بينما يتم التحقق من صحة جميع الصفوف ومن المحتمل أن تكون مكتوبة على ) أو من NOT NULL إلى NULLفي بعض الحالات فهذا يعد تغييرًا سريعًا في البيانات الوصفية فقط. قد تحتاج إلى الانتظار حتى SCH-M قفل على الطاولة ولكن بمجرد أن يكتشف أن التغيير سيكون فوريًا إلى حد كبير.

أحد التحذيرات التي يجب أن تدركها هو أنه أثناء انتظار SCH-M قفل الاستعلامات الأخرى سيتم حظر بدلاً من تجاوز قائمة الانتظار قبلها لذا قد ترغب في التفكير في إضافة SET LOCK_TIMEOUT أولاً.

تأكد أيضا في ALTER TABLE عبارة تحددها صراحة NOT NULL إذا كانت هذه هي الحالة الأصلية للعمود وإلا فسيتم تغيير العمود للسماح NULL.

44
Martin Smith