-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsp_findLinkedServer.sql
More file actions
47 lines (44 loc) · 1.28 KB
/
Copy pathsp_findLinkedServer.sql
File metadata and controls
47 lines (44 loc) · 1.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
USE [msdb]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET NOCOUNT ON
GO
CREATE OR ALTER PROCEDURE sp_findLinkedServer
@databaseName SYSNAME,
@remoteServerName SYSNAME OUTPUT
AS
BEGIN
--This procedure iterates thru list of linked server until it finds @databaseName.
--It returns as output parameter name of linked server that has @databaseName
SET NOCOUNT ON
DECLARE @SQL nvarchar (max)
DECLARE @message nvarchar (max)
DECLARE @parmDef nvarchar(max) = '@databaseName SYSNAME, @ret BIT OUTPUT';
DECLARE @serverName SYSNAME
DECLARE @ret BIT
DECLARE ServerCursor CURSOR LOCAL FAST_FORWARD FOR
SELECT [Name] FROM sys.servers ORDER BY server_id
OPEN ServerCursor
FETCH NEXT FROM ServerCursor INTO @serverName
WHILE @@FETCH_STATUS = 0
BEGIN
-- try to find database
SET @Sql = 'SELECT @ret = ( SELECT 1 FROM '+quotename(@serverName)+'.master.sys.databases WHERE [name] = @DatabaseName and state = 0 )'
BEGIN TRY
EXEC sp_executesql @SQL, @parmDef, @databaseName= @databaseName, @ret = @ret OUTPUT;
IF (@ret is not null and @ret =1)
BEGIN
SET @remoteServerName = @serverName
BREAK
END
END TRY
BEGIN CATCH
END CATCH;
FETCH NEXT FROM ServerCursor INTO @serverName
END
CLOSE ServerCursor;
DEALLOCATE ServerCursor;
END