[SQL Server] Trouver la liste des serveurs SQL Server connectés au réseau

  • Imprimer

--1-- Solution N°1

CREATE TABLE #Liste_Serveurs(Nom_Serveur VARCHAR(255))

INSERT #Liste_Serveurs(Nom_Serveur)

EXEC master..xp_CMDShell'OSQL -L'

DELETE

FROM #Liste_Serveurs

WHERE Nom_Serveur='Servers:'

OR Nom_Serveur IS NULL

SELECT LTRIM(Nom_Serveur)

FROM #Liste_Serveurs

DROP TABLE #Liste_Serveurs

--1-- Solution N°1

SET NOCOUNT ON

CREATE TABLE #Liste_Serveurs(Nom_Serveur VARCHAR(255),

Server_Version nvarchar(255))

INSERT #Liste_Serveurs(Nom_Serveur)

EXEC master..xp_CMDShell'sqlcmd -Lc'

DELETE FROM #Liste_Serveurs

WHERE Nom_Serveur = 'Servers:'

OR Nom_Serveur IS NULL

OR Nom_Serveur = ''

DECLARE @tempdata TABLE (scratch sql_variant)

DECLARE @version  nvarchar(255),

@cmd nvarchar(1000),

@serveur varchar(255)

DECLARE Liste_Serveurs CURSOR FAST_FORWARD

FOR SELECT Nom_Serveur FROM #Liste_Serveurs

OPEN Liste_Serveurs

FETCH NEXT FROM Liste_Serveurs INTO @serveur

WHILE @@FETCH_STATUS = 0

BEGIN

PRINT 'Processing: ' + @serveur

IF @serveur IN('servera','serverb')

BEGIN

UPDATE #Liste_Serveurs SET Server_Version = CASE @serveur

WHEN 'OLDDATA' THEN 'FailOver for Flowserver'

ELSE 'UNABLE TO CONNECT TO SERVER'

END

WHERE Nom_Serveur = @serveur

END

ELSE

BEGIN

SELECT @cmd = 'SET NOCOUNT ON;SELECT * FROM OPENROWSET(''SQLNCLI'', ''Server=' + @serveur + ';'

+ 'uid=' + CASE @serveur

WHEN 'server1' THEN 'usera'

ELSE 'userb'

END + ';'

+ 'pwd='+ CASE @serveur

WHEN 'server1' THEN 'pass1'

WHEN 'server2' THEN 'pass2'

ELSE 'commonpass'

END + ';'''

+ ', ''select @@version'')'

INSERT INTO @tempdata(scratch) EXEC (@cmd)

SELECT @version = convert(nvarchar(255),scratch) from @tempdata

DELETE FROM @tempdata

UPDATE #Liste_Serveurs SET Server_Version = @version WHERE Nom_Serveur = @serveur

END

FETCH NEXT FROM Liste_Serveurs INTO @serveur

END

CLOSE Liste_Serveurs

DEALLOCATE Liste_Serveurs

SELECT * FROM #Liste_Serveurs

DROP TABLE #Liste_Serveurs