2010-02-15 58 views
3

我有一个MySQL数据库,我正在迁移到SQL Server。当我针对SQL Server运行数据库时,引用数据库的应用程序中断,因为SQL Server不提供MySQL提供的隐式默认值。在SQL Server中为没有指定默认值的列生成默认值的脚本

我想看看是否有一种方法来生成强制所有没有指定缺省值的NOT Null列的缺省值的脚本。通过这种方式,我可以使用SQL Server中的显式默认值模仿MySQL的隐式默认值。

回答

2

尝试类似这样的操作。这会生成一些可以运行的SQL来添加缺少的默认值。所以运行这个,然后获取输出并运行它以实际添加默认值。此外,您可能想调整我在CASE中设置的默认值:

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')