Monday, 1 July 2013

GENERIC 13. Delete identity columns which are not there in later version

USE [DBName2]
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SourceIdents]') AND type in (N'U'))
DROP TABLE [dbo].[SourceIdents]
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TargetIdents]') AND type in (N'U'))
DROP TABLE [dbo].[TargetIdents]
GO
SELECT DISTINCT IDENT_SEED(QUOTENAME(T.TABLE_SCHEMA)+'.'+QUOTENAME(T.TABLE_NAME)) AS Seed,T.TABLE_SCHEMA COLLATE SQL_Latin1_General_CP1_CI_AS AS TABLE_SCHEMA,
IDENT_INCR(QUOTENAME(T.TABLE_SCHEMA)+'.'+QUOTENAME(T.TABLE_NAME)) AS Increment,
T.TABLE_NAME COLLATE SQL_Latin1_General_CP1_CI_AS AS TABLE_NAME,C.DATA_TYPE COLLATE SQL_Latin1_General_CP1_CI_AS AS DATA_TYPE ,C.COLUMN_NAME COLLATE SQL_Latin1_General_CP1_CI_AS AS COLUMN_NAME,COLUMNPROPERTY(OBJECT_ID(QUOTENAME(T.TABLE_SCHEMA)+'.'+QUOTENAME(T.TABLE_NAME)), C.COLUMN_NAME,'ISIDENTITY') AS Ident
INTO [DBName2]..SourceIdents
FROM [DBName2].INFORMATION_SCHEMA.TABLES T
JOIN [DBName2].INFORMATION_SCHEMA.COLUMNS C ON T.TABLE_NAME = C.TABLE_NAME AND T.TABLE_SCHEMA = C.TABLE_SCHEMA
WHERE COLUMNPROPERTY(OBJECT_ID(QUOTENAME(T.TABLE_SCHEMA)+'.'+QUOTENAME(T.TABLE_NAME)),C.COLUMN_NAME,'ISIDENTITY') = 1 AND
T.TABLE_TYPE = 'BASE TABLE'
AND T.TABLE_NAME NOT LIKE 'dt%'
AND T.TABLE_NAME NOT LIKE 'MS%'
AND T.TABLE_NAME NOT LIKE 'syncobj_%' AND T.TABLE_NAME NOT LIKE 'sysdiag_%'GOUSE [DBName1]GOSELECT DISTINCT IDENT_SEED(QUOTENAME(T.TABLE_SCHEMA)+'.'+QUOTENAME(T.TABLE_NAME)) AS Seed,T.TABLE_SCHEMA COLLATE SQL_Latin1_General_CP1_CI_AS AS TABLE_SCHEMA,
IDENT_INCR(QUOTENAME(T.TABLE_SCHEMA)+'.'+QUOTENAME(T.TABLE_NAME)) AS Increment,
T.TABLE_NAME COLLATE SQL_Latin1_General_CP1_CI_AS AS TABLE_NAME,C.DATA_TYPE COLLATE SQL_Latin1_General_CP1_CI_AS AS DATA_TYPE,C.COLUMN_NAME COLLATE SQL_Latin1_General_CP1_CI_AS AS COLUMN_NAME,COLUMNPROPERTY(OBJECT_ID(QUOTENAME(T.TABLE_SCHEMA)+'.'+QUOTENAME(T.TABLE_NAME)), C.COLUMN_NAME,'ISIDENTITY') AS Ident
INTO [DBName2]..TargetIdents
FROM [DBName1].INFORMATION_SCHEMA.TABLES T
JOIN [DBName1].INFORMATION_SCHEMA.COLUMNS C ON T.TABLE_NAME = C.TABLE_NAME AND T.TABLE_SCHEMA = C.TABLE_SCHEMA
WHERE COLUMNPROPERTY(OBJECT_ID(QUOTENAME(T.TABLE_SCHEMA)+'.'+QUOTENAME(T.TABLE_NAME)),C.COLUMN_NAME,'ISIDENTITY') = 1 AND
T.TABLE_TYPE = 'BASE TABLE'
AND T.TABLE_NAME NOT LIKE 'dt%'
AND T.TABLE_NAME NOT LIKE 'MS%'
AND T.TABLE_NAME NOT LIKE 'syncobj_%' AND T.TABLE_NAME NOT LIKE 'sysdiag_%'GOSELECT 'USE DBName2 '
UNION ALL
SELECT 'GO'
UNION ALL
SELECT '--DELETE IDENTITY COLUMNS WHICH ARE NOT THERE IN LATER VERSION'
UNION ALL
SELECT DISTINCT
'IF EXISTS ( SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS A JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS B ON A.TABLE_NAME = B.TABLE_NAME WHERE A.TABLE_SCHEMA = '''+A.TABLE_SCHEMA +''' AND A.TABLE_NAME = '''+A.TABLE_NAME+''' AND COLUMN_NAME = '''+A.COLUMN_NAME+''' AND B.CONSTRAINT_NAME = '''+TC.CONSTRAINT_NAME COLLATE SQL_Latin1_General_CP1_CI_AS +''' ) '
+CASE WHEN SC.COLUMN_NAME COLLATE SQL_Latin1_General_CP1_CI_AS IS NOT NULL THEN ' ALTER TABLE ['+TC.TABLE_SCHEMA COLLATE SQL_Latin1_General_CP1_CI_AS +'].[' +TC.TABLE_NAME COLLATE SQL_Latin1_General_CP1_CI_AS + '] DROP CONSTRAINT ['+TC.CONSTRAINT_NAME COLLATE SQL_Latin1_General_CP1_CI_AS + ']'
WHEN AC.name COLLATE SQL_Latin1_General_CP1_CI_AS IS NOT NULL THEN ' DROP INDEX ['+SI.name COLLATE SQL_Latin1_General_CP1_CI_AS + '] ON ['+TC.TABLE_SCHEMA COLLATE SQL_Latin1_General_CP1_CI_AS +'].[' +TC.TABLE_NAME COLLATE SQL_Latin1_General_CP1_CI_AS + '] WITH ( ONLINE = OFF ) '
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+''') ALTER TABLE ['+TC.TABLE_SCHEMA COLLATE SQL_Latin1_General_CP1_CI_AS +'].[' +A.TABLE_NAME+'] ADD ['+A.COLUMN_NAME+'_new] ' + A.DATA_TYPE + ' NULL GO 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+'_new'+''') BEGIN UPDATE ['+A.TABLE_SCHEMA+'].[' + A.TABLE_NAME +'] SET ' + A.COLUMN_NAME +'_new = ' + A.COLUMN_NAME +' ALTER TABLE ['+A.TABLE_SCHEMA+'].[' + A.TABLE_NAME +'] ALTER COLUMN ' + A.COLUMN_NAME +'_new ' + A.DATA_TYPE + ' NOT NULL ALTER TABLE ['+A.TABLE_SCHEMA+'].[' + A.TABLE_NAME +'] DROP COLUMN '+A.COLUMN_NAME+' EXEC sp_RENAME ''['+A.TABLE_SCHEMA+'].[' + A.TABLE_NAME +'].'+A.COLUMN_NAME+'_new'''+' , '''+A.COLUMN_NAME+''' , ''COLUMN''' + ' END GO '
FROM
(
SELECT * FROM [DBName2]..SourceIdents
EXCEPT
SELECT * FROM [DBName2]..TargetIdents
) A
JOIN [DBName1].INFORMATION_SCHEMA.COLUMNS B
ON B.COLUMN_NAME COLLATE SQL_Latin1_General_CP1_CI_AS <> A.COLUMN_NAME AND B.TABLE_NAME COLLATE SQL_Latin1_General_CP1_CI_AS = A.TABLE_NAME AND A.TABLE_SCHEMA = B.TABLE_SCHEMA COLLATE SQL_Latin1_General_CP1_CI_AS
LEFT JOIN [DBName2].INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC ON TC.TABLE_NAME = A.TABLE_NAME
LEFT JOIN [DBName2].INFORMATION_SCHEMA.COLUMNS SC ON TC.TABLE_NAME = SC.TABLE_NAME AND A.TABLE_NAME = SC.TABLE_NAME AND SC.COLUMN_NAME = A.COLUMN_NAME
LEFT JOIN [DBName2].SYS.TABLES ST ON ST.name = A.TABLE_NAME
LEFT JOIN [DBName2].SYS.INDEXES SI ON ST.object_id = SI.object_id
LEFT JOIN [DBName2].SYS.INDEX_COLUMNS C ON C.object_id = ST.object_id AND SI.index_id = C.index_id
LEFT JOIN [DBName2].SYS.ALL_COLUMNS AC ON AC.object_id = ST.object_id AND AC.column_id = C.column_id AND AC.name = A.COLUMN_NAME
WHERE TC.CONSTRAINT_TYPE IN ('PRIMARY KEY','UNIQUE')GOUSE [DBName2]
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SourceIdents]') AND type in (N'U'))
DROP TABLE [dbo].[SourceIdents]
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TargetIdents]') AND type in (N'U'))
DROP TABLE [dbo].[TargetIdents]
GO
SELECT IDENT_SEED(QUOTENAME(T.TABLE_SCHEMA)+'.'+QUOTENAME(T.TABLE_NAME)) AS Seed,D.CONSTRAINT_NAME,T.TABLE_SCHEMA,
IDENT_INCR(QUOTENAME(T.TABLE_SCHEMA)+'.'+QUOTENAME(T.TABLE_NAME)) AS Increment,
T.TABLE_NAME,C.DATA_TYPE ,C.COLUMN_NAME,COLUMNPROPERTY(OBJECT_ID(QUOTENAME(T.TABLE_SCHEMA)+'.'+QUOTENAME(T.TABLE_NAME)), C.COLUMN_NAME,'ISIDENTITY') AS Ident
INTO [dbo].[SourceIdents]
FROM [DBName2].INFORMATION_SCHEMA.TABLES T
JOIN [DBName2].INFORMATION_SCHEMA.COLUMNS C ON T.TABLE_NAME = C.TABLE_NAME AND T.TABLE_SCHEMA = C.TABLE_SCHEMA
JOIN [DBName2].INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE D ON D.TABLE_NAME = T.TABLE_NAME AND D.COLUMN_NAME = C.COLUMN_NAME
WHERE T.TABLE_TYPE = 'BASE TABLE' --AND COLUMNPROPERTY(OBJECT_ID(QUOTENAME(T.TABLE_SCHEMA)+'.'+QUOTENAME(T.TABLE_NAME)), C.COLUMN_NAME,'ISIDENTITY') = 1
--WHERE T.TABLE_NAME = 'tGatewayFileType' AND C.COLUMN_NAME = 'GatewayFileTypeId'GOUSE [DBName1]GOSELECT IDENT_SEED(QUOTENAME(T.TABLE_SCHEMA)+'.'+QUOTENAME(T.TABLE_NAME)) AS Seed,T.TABLE_SCHEMA,
IDENT_INCR(QUOTENAME(T.TABLE_SCHEMA)+'.'+QUOTENAME(T.TABLE_NAME)) AS Increment,
T.TABLE_NAME,C.DATA_TYPE ,C.COLUMN_NAME,COLUMNPROPERTY(OBJECT_ID(QUOTENAME(T.TABLE_SCHEMA)+'.'+QUOTENAME(T.TABLE_NAME)), C.COLUMN_NAME,'ISIDENTITY') AS Ident
INTO [DBName2]..TargetIdents
FROM [DBName2].INFORMATION_SCHEMA.TABLES T
JOIN [DBName2].INFORMATION_SCHEMA.COLUMNS C ON T.TABLE_NAME = C.TABLE_NAME AND T.TABLE_SCHEMA = C.TABLE_SCHEMA
WHERE T.TABLE_TYPE = 'BASE TABLE'
--WHERE T.TABLE_NAME = 'tGatewayFileType' AND C.COLUMN_NAME = 'GatewayFileTypeId'
GO
SELECT '--2ND SET OF DELETE IDENTITY COLUMNS WHICH ARE NOT THERE IN LATER VERSION'
UNION ALL
SELECT 'GO'
UNION ALL
SELECT
'IF EXISTS ( SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS A JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS B ON A.TABLE_NAME = B.TABLE_NAME WHERE A.TABLE_SCHEMA ='''+A.TABLE_SCHEMA +''' AND A.TABLE_NAME = '''+A.TABLE_NAME+''' AND COLUMN_NAME = '''+A.COLUMN_NAME+''' AND B.CONSTRAINT_NAME = '''+A.CONSTRAINT_NAME+''' ) '
+CASE WHEN A.COLUMN_NAME IS NOT NULL THEN ' ALTER TABLE ['+A.TABLE_SCHEMA+'].[' +A.TABLE_NAME + '] DROP CONSTRAINT ['+A.CONSTRAINT_NAME + ']'
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+''') ALTER TABLE ['+A.TABLE_SCHEMA+'].[' +A.TABLE_NAME+'] ADD ['+A.COLUMN_NAME+'_new] ' + B.DATA_TYPE + ' NULL GO 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+'_new'+''') BEGIN UPDATE ['+A.TABLE_SCHEMA+'].[' + A.TABLE_NAME +'] SET ' + A.COLUMN_NAME +'_new = ' + A.COLUMN_NAME +' ALTER TABLE ['+A.TABLE_SCHEMA+'].[' + A.TABLE_NAME +'] ALTER COLUMN ' + A.COLUMN_NAME +'_new ' + B.DATA_TYPE + ' NOT NULL ALTER TABLE ['+A.TABLE_SCHEMA+'].[' + A.TABLE_NAME +'] DROP COLUMN '+A.COLUMN_NAME+' EXEC sp_RENAME ''['+A.TABLE_SCHEMA+'].[' + A.TABLE_NAME +'].'+A.COLUMN_NAME+'_new'''+' , '''+A.COLUMN_NAME+''' , ''COLUMN''' + ' END GO'
FROM [DBName2]..SourceIdents A
JOIN [DBName2]..TargetIdents B ON A.TABLE_NAME = B.TABLE_NAME AND A.COLUMN_NAME = B.COLUMN_NAME AND A.TABLE_SCHEMA = B.TABLE_SCHEMA
WHERE B.Seed IS NULL AND B.Increment IS NULL AND B.Ident = 0 AND (A.Seed IS NOT NULL AND A.Increment IS NOT NULL AND A.Ident = 1)
GO
USE [DBName2]
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SourceIdents]') AND type in (N'U'))
DROP TABLE [dbo].[SourceIdents]
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TargetIdents]') AND type in (N'U'))
DROP TABLE [dbo].[TargetIdents]
GO
SELECT DISTINCT
IDENT_SEED(QUOTENAME(T.TABLE_SCHEMA)+'.'+QUOTENAME(T.TABLE_NAME)) AS Seed,T.TABLE_SCHEMA COLLATE SQL_Latin1_General_CP1_CI_AS as TABLE_SCHEMA ,
IDENT_INCR(QUOTENAME(T.TABLE_SCHEMA)+'.'+QUOTENAME(T.TABLE_NAME)) AS Increment,
--IDENT_CURRENT(TABLE_NAME) AS Current_Identity,
T.TABLE_NAME COLLATE SQL_Latin1_General_CP1_CI_AS AS TABLE_NAME,C.COLUMN_NAME COLLATE SQL_Latin1_General_CP1_CI_AS AS COLUMN_NAME,C.IS_NULLABLE COLLATE SQL_Latin1_General_CP1_CI_AS AS IS_NULLABLE,CCU.CONSTRAINT_NAME COLLATE SQL_Latin1_General_CP1_CI_AS AS CONSTRAINT_NAME,C.DATA_TYPE COLLATE SQL_Latin1_General_CP1_CI_AS AS DATA_TYPE
--,'DBCC CHECKIDENT(' + TABLE_NAME + ', RESEED, ' + CAST(IDENT_SEED(TABLE_NAME) AS VARCHAR(100)) + ')'
INTO [DBName2]..SourceIdents
FROM INFORMATION_SCHEMA.TABLES T
JOIN INFORMATION_SCHEMA.COLUMNS C ON T.TABLE_NAME = C.TABLE_NAME AND T.TABLE_SCHEMA = C.TABLE_SCHEMA
JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE CCU ON T.TABLE_NAME = CCU.TABLE_NAME AND CCU.COLUMN_NAME =C.COLUMN_NAME AND T.TABLE_SCHEMA = CCU.TABLE_SCHEMA
WHERE OBJECTPROPERTY(OBJECT_ID(QUOTENAME(T.TABLE_SCHEMA)+'.'+QUOTENAME(T.TABLE_NAME)), 'TableHasIdentity') = 1
AND COLUMNPROPERTY(OBJECT_ID(QUOTENAME(T.TABLE_SCHEMA)+'.'+QUOTENAME(T.TABLE_NAME)), C.COLUMN_NAME,'ISIDENTITY') = 1
AND T.TABLE_TYPE = 'BASE TABLE' AND T.TABLE_NAME NOT LIKE 'SYS%'
ORDER BY T.TABLE_NAMEGOUSE [DBName1]
GO
SELECT DISTINCT
IDENT_SEED(QUOTENAME(T.TABLE_SCHEMA)+'.'+QUOTENAME(T.TABLE_NAME)) AS Seed,T.TABLE_SCHEMA COLLATE SQL_Latin1_General_CP1_CI_AS as TABLE_SCHEMA,
IDENT_INCR(QUOTENAME(T.TABLE_SCHEMA)+'.'+QUOTENAME(T.TABLE_NAME)) AS Increment,
--IDENT_CURRENT(TABLE_NAME) AS Current_Identity,
T.TABLE_NAME COLLATE SQL_Latin1_General_CP1_CI_AS AS TABLE_NAME,C.COLUMN_NAME COLLATE SQL_Latin1_General_CP1_CI_AS as COLUMN_NAME,C.IS_NULLABLE COLLATE SQL_Latin1_General_CP1_CI_AS AS IS_NULLABLE,CCU.CONSTRAINT_NAME COLLATE SQL_Latin1_General_CP1_CI_AS as CONSTRAINT_NAME,C.DATA_TYPE COLLATE SQL_Latin1_General_CP1_CI_AS AS DATA_TYPE
--,'DBCC CHECKIDENT(' + TABLE_NAME + ', RESEED, ' + CAST(IDENT_SEED(TABLE_NAME) AS VARCHAR(100)) + ')'
INTO [DBName2]..TargetIdents
FROM INFORMATION_SCHEMA.TABLES T
JOIN INFORMATION_SCHEMA.COLUMNS C ON T.TABLE_NAME = C.TABLE_NAME
JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE CCU ON T.TABLE_NAME = CCU.TABLE_NAME AND CCU.COLUMN_NAME =C.COLUMN_NAME
WHERE OBJECTPROPERTY(OBJECT_ID(QUOTENAME(T.TABLE_SCHEMA)+'.'+QUOTENAME(T.TABLE_NAME)), 'TableHasIdentity') = 1
AND COLUMNPROPERTY(OBJECT_ID(QUOTENAME(T.TABLE_SCHEMA)+'.'+QUOTENAME(T.TABLE_NAME)), C.COLUMN_NAME,'ISIDENTITY') = 1
AND T.TABLE_TYPE = 'BASE TABLE' AND T.TABLE_NAME NOT LIKE 'SYS%'
ORDER BY T.TABLE_NAME COLLATE SQL_Latin1_General_CP1_CI_AS
GO
SELECT '--3RD SET OF DELETE IDENTITY COLUMNS WHICH ARE NOT THERE IN LATER VERSION'
UNION ALL
SELECT 'GO'
UNION ALL
SELECT
DISTINCT
'IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'''+B.TABLE_NAME +''') AND name = N'''+B.CONSTRAINT_NAME +''') ALTER TABLE ['+B.TABLE_SCHEMA+'].[' +B.TABLE_NAME+'] DROP CONSTRAINT ['+B.CONSTRAINT_NAME+'] IF EXISTS ( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA ='''+B.TABLE_SCHEMA +''' AND TABLE_NAME = '''+B.TABLE_NAME +''' AND COLUMN_NAME = '''+B.COLUMN_NAME+''') BEGIN ALTER TABLE ['+B.TABLE_SCHEMA+'].[' +B.TABLE_NAME+'] DROP COLUMN ['+B.COLUMN_NAME+'] ALTER TABLE ['+B.TABLE_SCHEMA+'].[' +B.TABLE_NAME+'] ADD ['+B.COLUMN_NAME+'] '+ B.DATA_TYPE +' IDENTITY('+ CAST(B.Seed AS VARCHAR)+',' + CAST(B.Increment AS VARCHAR)+ ') END IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'''+B.TABLE_NAME +''') AND name = N'''+B.CONSTRAINT_NAME +''') ALTER TABLE ['+B.TABLE_SCHEMA+'].[' +B.TABLE_NAME+'] ADD CONSTRAINT ['+B.CONSTRAINT_NAME+'] PRIMARY KEY CLUSTERED ( ['++B.COLUMN_NAME++'] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO'
FROM [DBName2]..SourceIdents A
JOIN [DBName2]..TargetIdents B ON A.TABLE_NAME = B.TABLE_NAME
WHERE A.Seed <> B.SeedGOUSE [DBName2]
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SourceIdents]') AND type in (N'U'))
DROP TABLE [dbo].[SourceIdents]
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TargetIdents]') AND type in (N'U'))
DROP TABLE [dbo].[TargetIdents]
GO
/*
UNION ALL
SELECT 'GO'
UNION ALL
SELECT '--2ND SET OF DELETE IDENTITY COLUMNS WHICH ARE NOT THERE IN LATER VERSION'
UNION ALL
SELECT DISTINCT --A.TABLE_NAME,A.COLUMN_NAME,B.DATA_TYPE
'IF EXISTS ( SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='''+A.TABLE_NAME+''' and COLUMN_NAME = '''+A.COLUMN_NAME+''')
BEGIN
ALTER TABLE ['+A.TABLE_NAME+'] ADD ['+A.COLUMN_NAME+'_new] ' + A.DATA_TYPE + ' NULL
END
GO
IF NOT EXISTS ( SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='''+A.TABLE_NAME+''' and COLUMN_NAME = '''+A.COLUMN_NAME+'_new'+''')
BEGIN
UPDATE '+ A.TABLE_NAME +' SET ' + A.COLUMN_NAME +'_new = ' + A.COLUMN_NAME +'
ALTER TABLE '+ A.TABLE_NAME +' ALTER COLUMN ' + A.COLUMN_NAME +'_new ' + A.DATA_TYPE + ' NOT NULL
ALTER TABLE '+ A.TABLE_NAME +' DROP COLUMN '+A.COLUMN_NAME+'
EXEC sp_RENAME '''+A.TABLE_NAME+'.'+A.COLUMN_NAME+'_new'''+' , '''+A.COLUMN_NAME+''' , ''COLUMN''' + '
END'
FROM ( SELECT TABLE_NAME,COLUMN_NAME,DATA_TYPE,Ident FROM [DBName2]..SourceIdents
EXCEPT
SELECT TABLE_NAME,COLUMN_NAME,DATA_TYPE,Ident FROM [DBName2]..TargetIdents ) A WHERE A.Ident = 1
GO
USE [DBName2]
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SourceIdents]') AND type in (N'U'))
DROP TABLE [dbo].[SourceIdents]
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TargetIdents]') AND type in (N'U'))
DROP TABLE [dbo].[TargetIdents]
GO
*/

No comments:

Post a comment