mysql - 为没有在 SQL Server 中指定默认值的非列生成默认值的脚本

标签 mysql sql-server-2008 default column-defaults

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

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

最佳答案

尝试这样的事情。这将生成一些 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')

关于mysql - 为没有在 SQL Server 中指定默认值的非列生成默认值的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2268501/

相关文章:

sql-server-2008 - 需要 SQL Server 2008 case 语句来评估表并返回两个值

c++ - 为什么在同一个类上使用不同的(shared_ptr 和普通)指针构造函数会得到不同的结果?

mysql - 添加/更改主索引的 InnoDB 性能

PHP explode 函数只允许我在搜索 in_array 时检测数组的第一项。为什么?

sql - T-SQL,计划作业中的多个更新

sql-server - 将数据附加到 SQL 列的最简单方法

android - 如何播放短信的默认声音?

c# - 所有对象都有默认值吗?

mysql - 为什么 VARCHAR 变量不能在 mysql 存储过程中使用内部查询作为列名?

MySQL NATURAL JOIN 3 与父表相关的表,并且对父表有约束