سؤال

لدي جدول يحتوي على ntext الحقل. MSDN يقول ntext هو مستنكر و أنها تشير إلى أنواع البيانات الأخرى:

ntext نص ، صورة أنواع البيانات التي سيتم إزالتها في النسخة المقبلة من Microsoft SQL Server.تجنب استخدام هذه الأنواع من البيانات في تطوير العمل و خطة لتعديل التطبيقات التي تستخدمها حاليا.استخدام nvarchar(max), varchar(max) ، varbinary(max) بدلا من ذلك.

في حالتي كانت قررت التحول إلى varbinary(max).حاولت تغيير تعريف الجدول ولكن ذلك لم ينجح.

ALTER TABLE MyTable ALTER COLUMN MyColumn VARBINARY(MAX);

ما هي الاحتمالات لتغيير نوع varbinary(max)? حاولت تغيير نوع من ntext -> nvarchar(max) ثم من nvarchar(max) -> varbinary(max) ولكن هذا غير ممكن (خطأ:التحويل الضمني من نوع البيانات nvarchar(max) إلى varbinary(max) هو مسموح به).

العمل فقط الحل هو إضافة عمود جديد من نوع varbinary(max), تحويل القيمة الموجودة في عمود جديد ومن ثم إسقاط العمود القديم.هذا يأخذ الكثير من الوقت (على بيانات عن 15GB يستغرق حوالي 30 دقيقة).وهذا هو السبب في أنني التحقيق في احتمالات أخرى لتحقيق نفس (ربما في مكان = دون تحريك بيانات التحويل).

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

المحلول

أفترض أنك ذهبت مع varbinary(max) لأن ntext عمود غير البيانات النصية في ذلك ؟ في هذه الحالة أعتقد أنك سوف تضطر إلى إضافة فصل varbinary(max) عمود إلى الجدول الخاص بك ، ثم قم بتشغيل عملية التحويل إلى نسخة من ntext إلى العمود الجديد.ثم حذف العمود القديم و إعادة تسمية عمود جديد إلى الاسم القديم.

"التحويل الضمني من نوع البيانات nvarchar(max) إلى varbinary(max) غير مسموح به" يعني أن عليك أن تكون صريحا عن التحويل.

نصائح أخرى

يبدو مثل هذا التحويل يجب أن يحدث في بعض نقطة.إذا كنت البحث, سوف تجد العديد من الناس الانتقال من النص إلى varchar(max) و تفيد يستغرق أكثر من 20 دقيقة إلى تحويل.بلدي اثنين سنتا بعد البحث لمدة بضع دقائق, حتى لا تأخذ الأمر على الإنجيل.

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

التعامل مع التحديثات يجعل الأمور أكثر تعقيدا بالطبع.

إضافة عمود إضافي هو على الارجح أفضل وسيلة للذهاب.أنا صالح تفعل هذا النوع من الشيء في خطوات للحد من المخاطر

  1. إضافة عمود varbinary(max) كما nullable
  2. تعديل إدراج رمز لملء كل الأعمدة
  3. في وقت فراغك ، ويقول بين عشية وضحاها ، قم بتشغيل عبارة UPDATE مع الزهر
  4. إزالة كافة التعليمات البرمجية دعم العمود القديم ، ضمان العمود الجديد هو قراءة
  5. إسقاط العمود القديم و تغيير عمود جديد إلى غير فارغة إذا لزم الأمر
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top