我有一个要迁移到 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/