1
+
2
+ CREATE PROCEDURE [dbo].[UpdateSynonyms]
3
+ @Database nvarchar (256 ), -- such as 'linkedserver.database' or just 'database'
4
+ @Schema sysname , -- such as 'dbo' or 'P6'
5
+ @Base_Object_Name_Like nvarchar (50 ), -- such as '%PMDB%'
6
+ @Object_Name nvarchar (50 )
7
+ AS
8
+
9
+ /*
10
+ '---------------------------------------------------------------------------------------
11
+ ' Purpose: This procedure creates Synonyms for the Primavera tables
12
+ ' Example: EXEC UpdateSynonyms '[LINKED_SERVER_NAME].PMDB', 'dbo', '%PMDB%', NULL
13
+ ' EXEC UpdateSynonyms 'PMDB_TEST', 'P6', '%PMDB%', NULL
14
+ '---------------------------------------------------------------------------------------
15
+
16
+ */
17
+
18
+ CREATE TABLE #Tables
19
+ (
20
+ TableID int identity (1 ,1 ) NOT NULL PRIMARY KEY CLUSTERED ,
21
+ Table_Name sysname
22
+ )
23
+ DECLARE
24
+ @SQL nvarchar (4000 ),
25
+ @SQL_Drop nvarchar (4000 ),
26
+ @ID int
27
+
28
+ BEGIN
29
+ IF (@Object_Name IS NULL )
30
+ SET @SQL = N ' SELECT name FROM sys.synonyms WHERE base_object_name LIKE '' ' + @Base_Object_Name_Like + ' '' '
31
+ ELSE
32
+ SET @SQL = N ' SELECT '' ' + @Object_Name + ' '' '
33
+ END
34
+
35
+ DECLARE @TableName nvarchar (100 )
36
+ INSERT #Tables EXEC sp_executesql @SQL
37
+ SELECT @ID = MAX (TableID) FROM #Tables
38
+ WHILE @ID > 0 BEGIN
39
+
40
+ -- drop the existing SYNONYM
41
+ SELECT @SQL = ' DROP SYNONYM ' + @Schema + ' .' + tbl .Table_Name
42
+ FROM
43
+ #Tables tbl
44
+ INNER JOIN sys .synonyms syn ON syn .name = tbl .Table_Name
45
+ WHERE
46
+ tbl .TableID = @ID
47
+ IF EXISTS (SELECT * FROM #Tables tbl INNER JOIN sys .synonyms syn ON syn .name = tbl .Table_Name WHERE tbl .TableID = @ID) BEGIN
48
+ EXEC sp_executesql @SQL
49
+ END
50
+
51
+ -- create synonyms here
52
+ SELECT @SQL = ' CREATE SYNONYM [' + @Schema + ' ].' + Table_Name + ' FOR ' + @Database + ' .dbo.' + Table_Name
53
+ FROM
54
+ #Tables
55
+ WHERE
56
+ TableID = @ID
57
+ EXEC sp_executesql @SQL
58
+ SELECT @TableName = Table_Name FROM #Tables WHERE TableID = @ID
59
+ SELECT @SQL = ' GRANT ALL ON [' + @Schema + ' ].' + @TableName + ' TO db_exec'
60
+ EXEC sp_executesql @SQL
61
+ SET @ID = @ID - 1
62
+
63
+ END
64
+
65
+
66
+ GO
0 commit comments