3

我有一个要迁移到 SQL Server 的 MySQL 数据库。当我针对 SQL Server 运行引用数据库的应用程序时,它会中断,因为 SQL Server 不提供 MySQL 提供的隐式默认值。

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

4

1 回答 1

2

尝试这样的事情。这将生成一些 SQL,您可以运行这些 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')
于 2010-02-15T20:43:15.393 回答