Monday, 1 July 2013

GENERIC 10. Update Data for newly added columns

USE [DBName1]
GO
SELECT 'USE [DBName2] '
UNION ALL
SELECT 'GO'
UNION ALL
SELECT '-- REPLACE "NULL IF EXISTS " WITH "NULL \x0d\x0a GO \x0d\x0a IF EXISTS" TO BREAK SQL LINES'
UNION ALL
SELECT 'SET NOCOUNT ON'
UNION ALL
SELECT
DISTINCT 'IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '''+A.TABLE_SCHEMA+''' AND TABLE_NAME = '''+A.TABLE_NAME+''' AND COLUMN_NAME = '''+A.COLUMN_NAME+''' AND DATA_TYPE = '''+A.DATA_TYPE+''')  ALTER TABLE ['+A.TABLE_SCHEMA+'].['+A.TABLE_NAME+'] ADD ['+A.COLUMN_NAME+'] ['+ A.DATA_TYPE+ '] ' + CASE WHEN A.DATA_TYPE IN ('NTEXT','XML') THEN '' WHEN A.DATA_TYPE = 'datetimeoffset' THEN '('+ CAST(A.DATETIME_PRECISION AS VARCHAR)+') ' ELSE CASE WHEN A.CHARACTER_MAXIMUM_LENGTH IS NOT NULL THEN +'('+CASE WHEN CAST( A.CHARACTER_MAXIMUM_LENGTH AS VARCHAR)= -1 THEN 'MAX' ELSE CAST( A.CHARACTER_MAXIMUM_LENGTH AS VARCHAR) END+')' ELSE '' END END + ' NULL ' -- CASE WHEN A.IS_NULLABLE = 'YES' THEN 'NULL' WHEN A.IS_NULLABLE = 'NO' THEN 'NOT NULL' END + ' ' + CASE WHEN A.COLUMN_DEFAULT IS NOT NULL THEN 'DEFAULT(' +A.COLUMN_DEFAULT + ')' ELSE '' END +CASE WHEN COLUMNPROPERTY(OBJECT_ID(A.TABLE_NAME), A.COLUMN_NAME,'ISIDENTITY') = 1 THEN ' IDENTITY('+CAST(IDENT_SEED(A.TABLE_NAME) AS VARCHAR)+', '+ CAST(IDENT_INCR(A.TABLE_NAME) AS VARCHAR) + ')' ELSE '' END
+ 'IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '''+A.TABLE_SCHEMA+''' AND TABLE_NAME = '''+A.TABLE_NAME+''' AND COLUMN_NAME = '''+A.COLUMN_NAME+''' AND DATA_TYPE = '''+A.DATA_TYPE+''')  BEGIN UPDATE ['+A.TABLE_SCHEMA+'].['+A.TABLE_NAME+'] SET ['+A.COLUMN_NAME+'] = '''' ALTER TABLE ['+A.TABLE_SCHEMA+'].['+A.TABLE_NAME+'] ALTER COLUMN ['+A.COLUMN_NAME+'] ['+ A.DATA_TYPE+ '] ' + CASE WHEN A.DATA_TYPE IN ('NTEXT','XML') THEN '' WHEN A.DATA_TYPE = 'datetimeoffset' THEN '('+ CAST(A.DATETIME_PRECISION AS VARCHAR)+') ' ELSE CASE WHEN A.CHARACTER_MAXIMUM_LENGTH IS NOT NULL THEN +'('+CASE WHEN CAST( A.CHARACTER_MAXIMUM_LENGTH AS VARCHAR)= -1 THEN 'MAX' ELSE CAST( A.CHARACTER_MAXIMUM_LENGTH AS VARCHAR) END+')' ELSE '' END END + CASE WHEN A.IS_NULLABLE = 'YES' THEN 'NULL' WHEN A.IS_NULLABLE = 'NO' THEN 'NOT NULL' END + ' END'
+ ' GO'
--DISTINCT A.TABLE_SCHEMA ,A.TABLE_NAME ,A.COLUMN_NAME,A.DATA_TYPE,A.IS_NULLABLE,A.COLUMN_DEFAULT,A.CHARACTER_MAXIMUM_LENGTH
FROM [DBName1].INFORMATION_SCHEMA.COLUMNS A
JOIN [DBName2].INFORMATION_SCHEMA.TABLES C ON A.TABLE_NAME = C.TABLE_NAME COLLATE SQL_Latin1_General_CP1_CI_AS AND A.TABLE_SCHEMA = C.TABLE_SCHEMA COLLATE SQL_Latin1_General_CP1_CI_AS
WHERE A.COLUMN_NAME NOT IN
(SELECT COLUMN_NAME COLLATE SQL_Latin1_General_CP1_CI_AS FROM [DBName2].INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME COLLATE SQL_Latin1_General_CP1_CI_AS = A.TABLE_NAME AND TABLE_SCHEMA COLLATE SQL_Latin1_General_CP1_CI_AS = A.TABLE_SCHEMA )
AND A.TABLE_NAME NOT LIKE 'SYS%' AND C.TABLE_TYPE COLLATE SQL_Latin1_General_CP1_CI_AS = 'BASE TABLE'
AND A.IS_NULLABLE = 'NO' -- YES/NO
AND A.COLUMN_DEFAULT IS NULL --NULL/NOT NULL
AND COLUMNPROPERTY(OBJECT_ID(QUOTENAME(A.TABLE_SCHEMA)+'.'+QUOTENAME(A.TABLE_NAME)),A.COLUMN_NAME,'ISIDENTITY') <> 1
GO

No comments:

Post a comment