Script para gerar valores padrão para não colunas sem padrões especificados no SQL Server
-
20-09-2019 - |
Pergunta
Eu tenho um banco de dados MySQL que estou migrando para o SQL Server. O aplicativo que faz referência ao banco de dados quebra quando o executo contra o SQL Server porque o SQL Server não oferece os padrões implícitos que o MySQL oferece.
Eu queria ver se existe uma maneira de gerar script que forçaria os padrões em todas as colunas não nulas que não possuem um padrão especificado. Dessa forma, posso imitar os padrões implícitos do MySQL usando padrões explícitos no SQL Server
Solução
Experimente algo assim. Isso gerará algum SQL que você pode executar para adicionar os padrões ausentes. Então execute isso e depois pegue a saída e execute isso para adicionar os padrões. Além disso, você pode querer ajustar o que eu defini como os padrões no caso:
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')