2010-02-15 2 views
3

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

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

ответ

2

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