-
Notifications
You must be signed in to change notification settings - Fork 38
/
Copy pathTsqlTools-SQLcompare-ObjectsCompare.sql
163 lines (120 loc) · 4.71 KB
/
TsqlTools-SQLcompare-ObjectsCompare.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
/*****************************************************************
-----------------------
tsqltools - SQLCOMPARE - Objects Compare
-----------------------
Version: v1.0
Release Date: 2017-07-30
Author: Bhuvanesh(@SQLadmin)
Feedback: mailto:[email protected]
Updates: http://medium.com/sqladmin
Repo: https://github.com/SqlAdmin/tsqltools/
License:
tsqltools is free to download.It contains Tsql stored procedures
and scripts to help the DBAs and Developers to make their job easier
(C) 2017
======================================================================
What is TsqlTools-SQLcompare?
TsqlTools-SQLcompare is a tsqlscript that will help to compare Databases,
Tables, Objects, Indexices between two servers without any tools.
======================================================================
How to Start?
Use a centalized server and create LinkedServers from the centralized server.
Or Create LinkedServer on SourceDB server then run this query on SourceDB server.
========================================================================*/
DECLARE @SOURCEDBSERVER VARCHAR(100)
DECLARE @DESTINATIONDBSERVER VARCHAR(100)
DECLARE @SOURCE_SQL_DBNAME NVARCHAR(300)
DECLARE @SOURCE_DATABASENAME TABLE
(
dbname VARCHAR(100)
)
SELECT @SOURCEDBSERVER = '[db01]' --==> Replace Your Source DB serverName Here
SELECT @DESTINATIONDBSERVER = '[db02]' --==> Replace Your Target DB serverName Here
SELECT @SOURCE_SQL_DBNAME = 'select name from ' + @SOURCEDBSERVER
+ '.master.sys.databases where database_id>4'
INSERT INTO @SOURCE_DATABASENAME
EXEC Sp_executesql
@SOURCE_SQL_DBNAME
CREATE TABLE #objectstaus
(
dbname NVARCHAR(500)
, objectname NVARCHAR(500)
, objecttype VARCHAR(500)
, status NVARCHAR(500)
)
DECLARE dbcursor CURSOR FOR
SELECT dbname
FROM @SOURCE_DATABASENAME
OPEN dbcursor
DECLARE @SOURCE_DBNAME VARCHAR(100)
FETCH next FROM dbcursor INTO @SOURCE_DBNAME
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @SOURCEDBSERVERNAME SYSNAME
DECLARE @DESTDBNAME SYSNAME
DECLARE @SQL VARCHAR(max)
SELECT @SOURCEDBSERVERNAME = (SELECT
@SOURCEDBSERVER + '.' + @SOURCE_DBNAME)
SELECT @DESTDBNAME = @DESTINATIONDBSERVER + '.' + @SOURCE_DBNAME
SELECT @SQL = ' SELECT ' + '''' + @SOURCE_DBNAME + '''' + ' as DB,
ISNULL(SoSource.name,SoDestination.name) ''Object Name'' , SoDestination.type_desc ,
CASE
WHEN SoSource.object_id IS NULL THEN + '' Available on ' + @DESTDBNAME + ''' COLLATE database_default
WHEN SoDestination.object_id IS NULL THEN + '' Available On ' + @SOURCEDBSERVERNAME + ''' COLLATE database_default
ELSE
+ '' Available On Both Servers'' COLLATE database_default END ''Status''
FROM (SELECT * FROM '
+ @SOURCEDBSERVERNAME
+ '.SYS.objects WHERE Type_desc not in (''INTERNAL_TABLE'',''SYSTEM_TABLE'',''SERVICE_QUEUE'')) SoSource
FULL OUTER JOIN (SELECT * FROM ' + @DESTDBNAME
+ '.SYS.objects
WHERE Type_desc not in (''INTERNAL_TABLE'',''SYSTEM_TABLE'',''SERVICE_QUEUE''))
SoDestination ON SoSource.name = SoDestination.name COLLATE database_default
AND SoSource.type = SoDestination.type
COLLATE database_default
ORDER BY isnull(SoSource.type,SoDestination.type)'
INSERT INTO #objectstaus
EXEC (@SQL)
FETCH next FROM dbcursor INTO @SOURCE_DBNAME
END
CLOSE dbcursor
DEALLOCATE dbcursor
SELECT *
FROM #objectstaus where objecttype='USER_TABLE'
ORDER BY dbname ASC
SELECT *
FROM #objectstaus where objecttype='CHECK_CONSTRAINT'
ORDER BY dbname ASC
SELECT *
FROM #objectstaus where objecttype='DEFAULT_CONSTRAINT'
ORDER BY dbname ASC
SELECT *
FROM #objectstaus where objecttype='FOREIGN_KEY_CONSTRAINT'
ORDER BY dbname ASC
SELECT *
FROM #objectstaus where objecttype='PRIMARY_KEY_CONSTRAINT'
ORDER BY dbname ASC
SELECT *
FROM #objectstaus where objecttype='UNIQUE_CONSTRAINT'
ORDER BY dbname ASC
SELECT *
FROM #objectstaus where objecttype='SQL_TRIGGER'
ORDER BY dbname ASC
SELECT *
FROM #objectstaus where objecttype='VIEW'
ORDER BY dbname ASC
SELECT *
FROM #objectstaus where objecttype='SQL_STORED_PROCEDURE'
ORDER BY dbname ASC
SELECT *
FROM #objectstaus where objecttype not in ('USER_TABLE',
'CHECK_CONSTRAINT',
'DEFAULT_CONSTRAINT',
'FOREIGN_KEY_CONSTRAINT',
'PRIMARY_KEY_CONSTRAINT',
'SQL_TRIGGER',
'VIEW',
'SQL_STORED_PROCEDURE'
'UNIQUE_CONSTRAINT')
ORDER BY dbname ASC
DROP TABLE #objectstaus