-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathspTransfer_All_DB_Objects.sql
More file actions
156 lines (122 loc) · 4.76 KB
/
spTransfer_All_DB_Objects.sql
File metadata and controls
156 lines (122 loc) · 4.76 KB
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
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE OR ALTER PROCEDURE [dbo].[spTransfer_All_DB_Objects]
@argProcessFirstResultSet BIT=1
AS
BEGIN
SET NOCOUNT ON
DECLARE @lcDB_Name VARCHAR(200), @lcSQL NVARCHAR(MAX)
TRUNCATE TABLE dbo.All_DB_Objects
TRUNCATE TABLE dbo.All_Object_Columns
DECLARE curDatabases CURSOR LOCAL FAST_FORWARD READ_ONLY FOR
SELECT name
FROM sys.databases
WHERE name NOT IN ('master', 'model', 'msdb', 'tempdb')
ORDER BY name ASC
OPEN curDatabases
FETCH NEXT FROM curDatabases INTO @lcDB_Name
WHILE @@FETCH_STATUS=0
BEGIN
--DB Objects
SET @lcSQL = 'USE [' + @lcDB_Name + ']; ' +
'SELECT DB_ID() AS DatabaseId, DB_NAME() AS DatabaseName, SCHEMA_NAME(O.schema_id) AS SchemaName, O.object_id AS ObjectId, O.name AS ObjectName,
O.[type] AS ObjectType, O.type_desc AS ObjectTypeDesc, O.create_date, O.modify_date, PO.name, NULL, OBJECTPROPERTY(O.object_id, ''IsSchemaBound'')
FROM sys.objects O WITH (NOLOCK)
LEFT JOIN sys.objects PO WITH (NOLOCK) ON O.parent_object_id = PO.object_id
WHERE O.is_ms_shipped=0
ORDER BY O.name'
INSERT INTO dbo.All_DB_Objects
EXEC (@lcSQL)
--Object Columns
SET @lcSQL = 'USE [' + @lcDB_Name + ']; ' +
'SELECT DB_ID() AS DatabaseId, DB_NAME() AS DatabaseName, C.object_id, C.column_id, C.name, C.system_type_id, C.max_length, C.precision, C.scale, C.is_nullable, C.is_identity, C.is_computed
FROM sys.columns C
JOIN sys.objects O ON C.object_id = O.object_id
WHERE O.is_ms_shipped=0
ORDER BY C.object_id, C.column_id'
INSERT INTO dbo.All_Object_Columns
EXEC (@lcSQL)
FETCH NEXT FROM curDatabases INTO @lcDB_Name
END
CLOSE curDatabases
DEALLOCATE curDatabases
UPDATE O SET Fields = CAST('<Fields>' + (SELECT C.name
FROM dbo.All_Object_Columns C WITH (NOLOCK)
WHERE C.DatabaseId = O.DatabaseId AND C.object_id = O.ObjectId
ORDER BY C.name
FOR XML PATH('FieldInfo')) + '</Fields>' AS XML)
FROM dbo.All_DB_Objects O ;
IF ISNULL(@argProcessFirstResultSet,1) =0
RETURN
DROP TABLE IF EXISTS #tmpfirst_result_set;
CREATE TABLE #tmpfirst_result_set(
[is_hidden] [bit] NULL,
[column_ordinal] [int] NULL,
[name] [nvarchar](128) NULL,
[is_nullable] [bit] NULL,
[system_type_id] [int] NULL,
[system_type_name] [nvarchar](128) NULL,
[max_length] [smallint] NULL,
[precision] [tinyint] NULL,
[scale] [tinyint] NULL,
[collation_name] [nvarchar](128) NULL,
[user_type_id] [int] NULL,
[user_type_database] [nvarchar](128) NULL,
[user_type_schema] [nvarchar](128) NULL,
[user_type_name] [nvarchar](128) NULL,
[assembly_qualified_type_name] [nvarchar](4000) NULL,
[xml_collection_id] [int] NULL,
[xml_collection_database] [nvarchar](128) NULL,
[xml_collection_schema] [nvarchar](128) NULL,
[xml_collection_name] [nvarchar](128) NULL,
[is_xml_document] [bit] NULL,
[is_case_sensitive] [bit] NULL,
[is_fixed_length_clr_type] [bit] NULL,
[source_server] [nvarchar](128) NULL,
[source_database] [nvarchar](128) NULL,
[source_schema] [nvarchar](128) NULL,
[source_table] [nvarchar](128) NULL,
[source_column] [nvarchar](128) NULL,
[is_identity_column] [bit] NULL,
[is_part_of_unique_key] [bit] NULL,
[is_updateable] [bit] NULL,
[is_computed_column] [bit] NULL,
[is_sparse_column_set] [bit] NULL,
[ordinal_in_order_by_list] [smallint] NULL,
[order_by_list_length] [smallint] NULL,
[order_by_is_descending] [bit] NULL,
[tds_type_id] [int] NULL,
[tds_length] [int] NULL,
[tds_collation_id] [int] NULL,
[tds_collation_sort_id] [tinyint] NULL
)
DECLARE @lcObjectParametre NVARCHAR(MAX)
DECLARE @lcSPName NVARCHAR(MAX),@lcSchemaName VARCHAR(50),@lcDBId SMALLINT,@lcObject_id INT
DECLARE curObjects CURSOR LOCAL FAST_FORWARD READ_ONLY FOR
SELECT DatabaseId,DatabaseName,ObjectId,SchemaName,ObjectName FROM All_DB_Objects WHERE ObjectType='P'
OPEN curObjects
FETCH NEXT FROM curObjects INTO @lcDBId,@lcDB_Name,@lcObject_id,@lcSchemaName,@lcSPName
WHILE @@FETCH_STATUS=0
BEGIN
BEGIN TRY
TRUNCATE TABLE #tmpfirst_result_set;
SET @lcObjectParametre = @lcSchemaName + N'.'+ @lcSPName
PRINT @lcObjectParametre
SET @lcSQL ='USE ' + QUOTENAME(@lcDB_Name)+';'+
'INSERT INTO #tmpfirst_result_set
EXEC sp_describe_first_result_set @lcObjectParametre, null, 1 ;'
EXEC sp_executesql @lcSQL, N'@lcObjectParametre NVARCHAR(MAX)', @lcObjectParametre
INSERT INTO All_Object_Columns
SELECT @lcDBId,@lcDB_Name,@lcObject_id,column_ordinal, name,system_type_id,max_length,precision,scale,is_nullable,is_identity_column,is_computed_column
FROM #tmpfirst_result_set WHERE is_hidden=0 AND name IS NOT null
END TRY
BEGIN CATCH
END CATCH
FETCH NEXT FROM curObjects INTO @lcDBId,@lcDB_Name,@lcObject_id,@lcSchemaName,@lcSPName
END
CLOSE curObjects
DEALLOCATE curObjects
END
GO