Script auf die Standardwerte für Spalten nicht ohne Vorgaben angegeben in SQL Server zu generieren
-
20-09-2019 - |
Frage
ich eine MySQL-Datenbank haben, dass ich auf SQL Server bin migrieren. Die Anwendung, die Referenzen die Datenbank bricht, wenn ich es gegen SQL Server ausgeführt werden, da SQL Server nicht die impliziten Standardwerte bietet, dass MySQL bietet.
wollte ich sehen, ob es eine Möglichkeit ist Skript zu generieren, die standardmäßig auf alles NOT NULL-Spalten zwingen würden, die angegeben keinen Standard haben. Auf diese Weise kann ich imitieren MySQL implizite Standardwerte explizite Vorgaben in SQL Server mit
Lösung
versuchen so etwas wie dieses. Dies wird einige SQL generieren, dass Sie die fehlenden Standardwerte hinzufügen können ausgeführt werden. Also diese laufen und dann den Ausgang nehmen und führen, dass tatsächlich die Standardwerte hinzuzufügen. Außerdem können Sie zwicken, was ich als die Standardwerte in der CASE gesetzt:
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')