البرنامج النصي لإنشاء قيم افتراضية لأعمدة ليس مع عدم وجود افتراضات محددة في SQL Server
-
20-09-2019 - |
سؤال
لدي قاعدة بيانات 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')
لا تنتمي إلى StackOverflow