Show all Objects used by Linked Server
This script will require you to have read permissions on system views (sys.servers, sys.sql_modules, sys.objects). To create the procedure simply run the code above. To run the comments contain two examples of how to run. Simply put in the procedure name followed by either null or the name of the linked server you wish to run against.
create proc usp_get_linked_server_use @LinkedServerName varchar(800)
as
/******************************************************************************
* File Name: dbo.usp_get_linked_server_use
* File Desc: Will return all objects, and object type for the Linked
* Server Name given. If no name is provided code will run for
* all linked servers on the box
* Database: DBAADMIN
* Language: MS Transact-SQL
* Version: MS SQL 2005-2008r2
*
* Views: sys.servers,sys.sql_modules,sys.objects
*
* Procedures: N/A
*
* Date: 8/1/2012
*
* Architect: Kiley Milakovic
* Project Mgr: N/A
* Project ID: N/A
*
* Notes:
* 1. Copyright (c) 2012 Developers IT, LLC
*
* Special Comments/Warnings
* [to run] usp_get_linked_server_use 'your linked server name here'
* usp_get_linked_server_use null
*
*******************************************************************************
* Version: xxxxx Author: xxxxxxxxxxxxx
* Date: xx/xx/xxxx
*******************************************************************************
* Description of Requests:
* 1. xxxxxxx
*
* Description of Modifications:
* 1. xxxxxxx
*
* Special Comments:
* None
*
* Other modules changed with this request:
* None
*******************************************************************************/
declare @loopcount bigint,
@HoldServ varchar(800),
@linkcount int
create table #holdlinked
(
tabid bigint identity(1,1),
LinkedServerName varchar(800)
)
create table #holdinfo
(
tabid bigint identity(1,1),
LinkedServerName varchar(800),
ObjectName varchar(800),
ObjectType varchar(200)
)
/******************************************************************************
*Get Server(s) list
*******************************************************************************/
if isnull(@LinkedServerName,'0') = '0'
begin
insert into #holdlinked(LinkedServerName)
select name
From sys.servers
Where is_linked = 1
end
else
begin
insert into #holdlinked(LinkedServerName)
select name
From sys.servers
Where [name] = @LinkedServerName and is_linked = 1
end
select @linkcount = count(1)
from #holdlinked
/******************************************************************************
*Process Objects
*******************************************************************************/
set @loopcount = 1
while @loopcount <= @linkcount
begin
select @HoldServ = LinkedServerName
from #holdlinked
where tabid = @loopcount
insert into #holdinfo(LinkedServerName,ObjectName,ObjectType)
SELECT @HoldServ,OBJECT_NAME(sm.object_id),so.[type_desc]
FROM sys.sql_modules sm inner join sys.objects so on sm.object_id = so.object_id
WHERE Definition LIKE '%'+@HoldServ +'%' AND (OBJECTPROPERTY(sm.object_id, 'IsProcedure') = 1 or
OBJECTPROPERTY(sm.object_id, 'IsScalarFunction') = 1 or
OBJECTPROPERTY(sm.object_id, 'IsTable') = 1 or
OBJECTPROPERTY(sm.object_id, 'IsTableFunction') = 1 or
OBJECTPROPERTY(sm.object_id, 'IsView') = 1 or
OBJECTPROPERTY(sm.object_id, 'IsUserTable') = 1 )
set @HoldServ = null
set @loopcount = @loopcount + 1
end
/******************************************************************************
*Show Results
*******************************************************************************/
select LinkedServerName,ObjectType,ObjectName
from #holdinfo
order by LinkedServerName,ObjectName