DECLARE @DropSynonym NVARCHAR(4000), @CreateSynonym NVARCHAR(4000), @Permissions NVARCHAR(4000) SELECT @DropSynonym = '', @CreateSynonym = '', @Permissions = '' SELECT @DropSynonym = @DropSynonym + 'DROP SYNONYM ' + QUOTENAME(SCHEMA_NAME(SCHEMA_ID)) + '.' + QUOTENAME(NAME) + '; ', @CreateSynonym = @CreateSynonym + 'CREATE SYNONYM ' + QUOTENAME(SCHEMA_NAME(SCHEMA_ID)) + '.' + QUOTENAME(NAME) + ' FOR ' + REPLACE(base_object_name, '[OldDB]', '[NewDB]') + '; ' FROM sys.synonyms ; WITH PermQuery AS (SELECT CASE WHEN perm.state <> 'W' THEN perm.state_desc ELSE 'GRANT' END COLLATE database_default AS PermissionState, perm.permission_name COLLATE database_default AS Permission, SCHEMA_NAME(obj.schema_id) AS SchemaName, obj.name AS ObjectName, CASE WHEN cl.column_id IS NULL THEN SPACE(0) ELSE '(' + QUOTENAME(cl.name) + ')' END AS ColumnName, CASE WHEN perm.state <> 'W' THEN 'N' ELSE 'Y' END AS WithOption, usr.name AS UserName FROM sys.synonyms AS s INNER JOIN sys.all_objects AS obj ON s.object_id = obj.object_id INNER JOIN sys.database_permissions AS perm ON perm.major_id = obj.[object_id] INNER JOIN sys.database_principals AS usr ON perm.grantee_principal_id = usr.principal_id LEFT JOIN sys.columns AS cl ON cl.column_id = perm.minor_id AND cl.[object_id] = perm.major_id) SELECT @Permissions = @Permissions + PermissionState + ' ' + Permission + ' ON ' + QUOTENAME(SchemaName) + '.' + QUOTENAME(ObjectName) + ' ' + ColumnName + ' TO ' + UserName + CASE WithOption WHEN 'Y' THEN ' WITH GRANT OPTION' ELSE '' END + '; ' FROM PermQuery PRINT @DropSynonym EXEC(@DropSynonym) PRINT @CreateSynonym EXEC(@CreateSynonym) PRINT @Permissions EXEC (@Permissions)
Showing posts with label Modifying SQL Server Synonyms (Can't Alter Synonyms). Show all posts
Showing posts with label Modifying SQL Server Synonyms (Can't Alter Synonyms). Show all posts
Thursday, May 30, 2013
Modifying SQL Server Synonyms (Can't Alter Synonyms)
Subscribe to:
Posts (Atom)