SQL Server에 기본값이 지정되지 않은 열이 아닌 기본값을 생성하는 스크립트
-
20-09-2019 - |
문제
SQL Server로 마이그레이션하는 MySQL 데이터베이스가 있습니다. SQL Server가 MySQL이 제공하는 암시 적 기본값을 제공하지 않기 때문에 데이터베이스를 참조하는 응용 프로그램은 SQL Server에 대해 실행할 때 분리됩니다.
기본값을 지정하지 않은 널이 아닌 모든 열에서 기본값을 강제로하는 스크립트를 생성하는 방법이 있는지 알고 싶었습니다. 이렇게하면 SQL Server에서 명시 적 기본값을 사용하여 MySQL의 암시 적 기본값을 모방 할 수 있습니다.
해결책
이와 같은 것을 시도하십시오. 누락 된 기본값을 추가하기 위해 실행할 수있는 SQL이 생성됩니다. 따라서 이것을 실행 한 다음 출력을 가져 와서 실행하여 실제로 기본값을 추가하십시오. 또한 사례에서 기본값으로 설정 한 내용을 조정할 수 있습니다.
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')
제휴하지 않습니다 StackOverflow