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

Était-ce utile?

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')
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top