Monday, 1 July 2013

GENERIC 14. Drop Tables & Columns which are not there in Later version

USE DBName2
GO
SELECT 'USE DBName2 '
UNION ALL
SELECT 'GO'
UNION ALL
SELECT '-- DROP TABLES WHICH ARE NOT THERE IN LATER VERSION'
UNION ALL
SELECT
DISTINCT -- TABLE_NAME
'IF EXISTS ( SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '''+A.TABLE_SCHEMA +''' AND TABLE_NAME = '''+A.TABLE_NAME+''') DROP TABLE ['+A.TABLE_SCHEMA +'].['+A.TABLE_NAME + ']'+ ' GO'
FROM DBName2.INFORMATION_SCHEMA.TABLES A
WHERE TABLE_NAME COLLATE SQL_Latin1_General_CP1_CI_AS NOT IN ( SELECT DISTINCT TABLE_NAME FROM [DBName1].INFORMATION_SCHEMA.TABLES) AND TABLE_NAME NOT LIKE 'SYS%'
UNION ALL
SELECT 'GO'
UNION ALL
SELECT '-- DROP COLUMNS WHICH ARE NOT THERE IN LATER VERSION'
UNION ALL
SELECT DISTINCT --A.TABLE_NAME,B.COLUMN_NAME
'IF EXISTS ( SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '''+B.TABLE_SCHEMA +''' AND TABLE_NAME = '''+B.TABLE_NAME+''' AND COLUMN_NAME = '''+B.COLUMN_NAME+''') ALTER TABLE ['+A.TABLE_SCHEMA +'].['+A.TABLE_NAME + '] DROP COLUMN ['+B.COLUMN_NAME+'] '+ ' GO'
FROM
DBName2.INFORMATION_SCHEMA.TABLES A
LEFT JOIN DBName2.INFORMATION_SCHEMA.COLUMNS B ON A.TABLE_NAME = B.TABLE_NAME
LEFT JOIN [DBName1].INFORMATION_SCHEMA.TABLES C ON A.TABLE_NAME COLLATE SQL_Latin1_General_CP1_CI_AS = C.TABLE_NAME
LEFT JOIN [DBName1].INFORMATION_SCHEMA.COLUMNS D ON D.TABLE_NAME = C.TABLE_NAME
WHERE B.COLUMN_NAME COLLATE SQL_Latin1_General_CP1_CI_AS NOT IN ( SELECT COLUMN_NAME FROM [DBName1].INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = A.TABLE_NAME COLLATE SQL_Latin1_General_CP1_CI_AS )
AND A.TABLE_TYPE = 'BASE TABLE' AND A.TABLE_NAME NOT LIKE 'SYS%'


No comments:

Post a comment