Late to the side, I created a request to check the existence of Synonyms and share with you.
DECLARE @Synonyms table ( ID int identity(1,1), SynonymsDatabaseName sysname, SynonymsSchemaName sysname, SynonymsName sysname, DatabaseName nvarchar(128), SchemaName nvarchar(128), ObjectName nvarchar(128), Remark nvarchar(max), IsExists bit default(0) ) INSERT @Synonyms (SynonymsDatabaseName, SynonymsSchemaName, SynonymsName, DatabaseName, SchemaName, ObjectName) SELECT DB_NAME() AS SynonymsDatabaseName, SCHEMA_NAME(schema_id) AS SynonymsSchemaName, name AS SynonymsName, PARSENAME(base_object_name,3) AS DatabaseName, PARSENAME(base_object_name,2) AS SchemaName, PARSENAME(base_object_name,1) AS ObjectName FROM sys.synonyms SET NOCOUNT ON DECLARE @ID int = 1, @Query nvarchar(max), @Remark nvarchar(max) WHILE EXISTS(SELECT * FROM @Synonyms WHERE ID = @ID) BEGIN SELECT @Query = 'SELECT @Remark = o.type_desc FROM [' + DatabaseName + '].sys.objects o INNER JOIN sys.schemas s ON o.schema_id = s.schema_id WHERE s.name = ''' + SchemaName + ''' AND o.name = ''' + ObjectName + '''' FROM @Synonyms WHERE ID = @ID EXEC sp_executesql @Query, N'@Remark nvarchar(max) OUTPUT', @Remark OUTPUT; UPDATE @Synonyms SET IsExists = CASE WHEN @Remark IS NULL THEN 0 ELSE 1 END, Remark = @Remark WHERE ID = @ID SELECT @ID += 1, @Remark = NULL END SELECT * FROM @Synonyms
source share