البرنامج النصي لإنشاء قيم افتراضية لأعمدة ليس مع عدم وجود افتراضات محددة في SQL Server

StackOverflow https://stackoverflow.com/questions/2268501

سؤال

لدي قاعدة بيانات MySQL التي أقوم بترحيلها إلى SQL Server. التطبيق الذي يشير إلى كسر قاعدة البيانات عند تشغيله ضد SQL Server لأن SQL Server لا يقدم الافتراضات الضمنية التي يقدمها MySQL.

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

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

المحلول

جرب شيئًا كهذا. سيؤدي ذلك إلى توليد بعض SQL التي يمكنك تشغيلها لإضافة الإعدادات الافتراضية المفقودة. حتى قم بتشغيل هذا ثم خذ الإخراج وقم بتشغيل ذلك لإضافة الإعدادات الافتراضية فعليًا. أيضًا ، قد ترغب في تعديل ما قمت بتعيينه كإعدادات افتراضية في الحالة:

SELECT
'ALTER TABLE '+c.TABLE_CATALOG+'.'+c.TABLE_SCHEMA+'.'+c.TABLE_NAME
    +' ADD CONSTRAINT DF_'+c.TABLE_NAME+'_'+c.COLUMN_NAME+'_'+CONVERT(varchar(5),c.ORDINAL_POSITION)
    +' DEFAULT '
        +CASE c.DATA_TYPE
             WHEN 'money'         THEN '0.0'
             WHEN 'int'           THEN '0'
             WHEN 'text'          THEN ''''''
             WHEN 'smallint'      THEN '0'
             WHEN 'datetime'      THEN 'GETDATE()'
             WHEN 'varchar'       THEN ''''''
             WHEN 'numeric'       THEN '0'
             WHEN 'tinyint'       THEN '0'
             WHEN 'smalldatetime' THEN 'GETDATE()'
             WHEN 'float'         THEN '0.0'
             WHEN 'char'          THEN ''''''
             WHEN 'bigint'        THEN '0'
             WHEN 'bit'           THEN '0'
             WHEN 'nvarchar'      THEN ''''''
         END
        +' FOR '+c.COLUMN_NAME
    FROM INFORMATION_SCHEMA.COLUMNS    c
    WHERE c.COLUMN_DEFAULT IS NULL AND IS_NULLABLE='NO'
        AND c.DATA_TYPE NOT IN ('image','varbinary','binary')
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top