スクリプトのSQL Serverで指定されていないデフォルト値を使用していない列のデフォルト値を生成します

StackOverflow https://stackoverflow.com/questions/2268501

質問

私は、SQL Serverに移行していますMySQLデータベースを持っています。 SQL Serverは、MySQLが提供しています暗黙のデフォルトを提供していないので、私はSQL Serverに対して、それを実行すると、データベースの破損を参照するアプリケーションます。

私は、指定されたデフォルトを持っていないすべてのNOT NULL列にデフォルト値を強制するスクリプトを生成する方法があるかどうかを確認したかったです。このように、私は、SQL Serverで明示的なデフォルト値を使用してMySQLの暗黙のデフォルトを模倣することができます。

役に立ちましたか?

解決

このような何かを試してみてください。これは、あなたが不足しているデフォルト値を追加するために実行することができ、いくつかの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')
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top