2010-02-15 5 views
3

J'ai une base de données MySQL que je migre vers SQL Server. L'application qui référence la base de données se brise lorsque je l'exécute sur SQL Server, car SQL Server n'offre pas les valeurs par défaut implicites proposées par MySQL.Script pour générer des valeurs par défaut pour les colonnes sans valeurs par défaut spécifiées dans SQL Server

Je voulais voir s'il y avait un moyen de générer un script qui forcerait les valeurs par défaut sur toutes les colonnes NOT Null qui n'ont pas de valeur par défaut. De cette façon, je peux imiter les paramètres par défaut implicites de MySQL en utilisant des valeurs par défaut explicites dans SQL Server

Répondre

2

essayez quelque chose comme ceci. cela va générer du code SQL que vous pouvez exécuter pour ajouter les valeurs par défaut manquantes. Alors lancez ceci, puis prenez la sortie et exécutez la commande pour ajouter les valeurs par défaut. Aussi, vous voudrez peut-être modifier ce que je définis comme les valeurs 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') 
Questions connexes