Script pour générer des valeurs par défaut pour les colonnes non sans valeurs au SQL Server
-
20-09-2019 - |
Question
J'ai une base de données MySQL que je suis la migration vers SQL Server. L'application qui fait référence à la rupture de la base de données quand je le lance sur SQL Server, car SQL Server ne propose pas les paramètres par défaut implicites que MySQL offre.
Je voulais voir s'il y a un moyen pour générer le script qui forcerait les valeurs par défaut sur toutes les colonnes NOT NULL qui ne disposent pas d'un défaut spécifié. De cette façon, je peux imiter les valeurs par défaut implicites de MySQL à l'aide de valeurs par défaut explicites dans SQL Server
La solution
essayer quelque chose comme ça. cela va générer une SQL que vous pouvez exécuter pour ajouter les valeurs par défaut manquantes. Alors courez cela et puis prendre la sortie et exécuter que pour ajouter réellement les valeurs par défaut. , Vous pouvez également modifier ce que je définis par défaut dans le cas:
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')