Como listar as instâncias de SQL Server da rede

Apareceu essa questão na lista SQLServerDay. Várias foram as soluções, sendo que eu enviei as seguintes:

Usando o OSQL.exe (cliente para o SQL Server):

C:\Users\agnaldo>osql -L

Servers:
    NOTE\SQL2008
    NOTE\SQLEXPRESS
    NOTEBOOK

C:\Users\agnaldo>

A outra solução foi fazer um aplicativo Windows Forms em C#, com um DataGridView na tela, para apresentar os dados:

using System;
using 
System.Windows.Forms;

using 
System.Data.Sql;

namespace 
DescobrirSQLs
{
    
public partial class Form1 : Form
    {
        
public Form1()
        {
            InitializeComponent()
;
        
}
        
private void Form1_Load(object sender, EventArgs e)
        {
            SqlDataSourceEnumerator sqls 
SqlDataSourceEnumerator.Instance;

            
dataGridView1.DataSource sqls.GetDataSources();
        
}
    }
}

A única observação é que, nos dois casos, o serviço SQL Server Browser tem que estar executando nas máquinas. Se não, não lista.

Outras soluções foram:

  • Usar T-SQL como explicado em http://bit.ly/a1UZFc (para um só servidor).
  • Usar PowerShell para ler o registry do servidor (para um só servidor):
$sql [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine',$computer)
.OpenSubKey(
'SOFTWARE\Microsoft\Microsoft SQL Server').GetValue('InstalledInstances');
  
foreach($sqlserver in $sql)
  {
   
if($sqlserver -eq "MSSQLSERVER"Default instance
   {
    Write-Host -ForegroundColor Green 
"$computer (Default instance)";
   
}
   
else # Named instance
   {
    Write-Host -ForegroundColor Green 
"$computer\$sqlserver (Named instance)";
   
}
  }

 

Comentar

  Country flag

biuquote
  • Comentário
  • Pré-visualização
Loading