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)
Thursday, May 30, 2013
Modifying SQL Server Synonyms (Can't Alter Synonyms)
Subscribe to:
Posts (Atom)