Скрипт для генерации значений по умолчанию для не столбцов без значений по умолчанию, указанных в SQL Server - PullRequest
3 голосов
/ 15 февраля 2010

У меня есть база данных MySQL, которую я мигрирую на SQL Server. Приложение, которое ссылается на базу данных, разрывается, когда я запускаю ее на SQL Server, поскольку SQL Server не предлагает неявные значения по умолчанию, которые предлагает MySQL.

Я хотел посмотреть, есть ли способ генерировать скрипт, который бы принудительно устанавливал значения по умолчанию для всех столбцов NOT Null, для которых не задано значение по умолчанию. Таким образом, я могу имитировать неявные значения по умолчанию MySQL, используя явные значения по умолчанию в SQL Server

1 Ответ

2 голосов
/ 15 февраля 2010

попробуйте что-то вроде этого. это сгенерирует некоторый 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')
...