Bagaimana saya bisa menentukan contoh SQL Server yang diinstal dan versinya?

224

Saya mencoba menentukan instance sql server / sql express apa yang telah saya instal (baik secara manual atau terprogram) tetapi semua contoh memberi tahu saya untuk menjalankan kueri SQL untuk menentukan ini yang mengasumsikan saya sudah terhubung ke instance tertentu .

Luke
sumber
1
Berikut adalah tautan cara mengidentifikasi dengan sqlcmd msdn.microsoft.com/en-us/library/ms165662%28v=sql.90%29.aspx
Cara Menemukan Contoh SQL Server Anda (Nama Server) dan Versi youtube.com/watch?v=DLrxFXXeLFk
mloskot
dapatkah Anda memberi tahu saya pertanyaan SQL yang Anda bicarakan?
LearnByReading
1
@LearnByReading Lihat jawaban Mohammed Ifteqar Ahmed di bawah ini.
Lukas
2
Anda dapat menginterogasi pendaftaran: pmichaels.net/2016/02/12/...
Paul Michaels

Jawaban:

209

Di baris perintah:

SQLCMD -L

atau

OSQL -L

(Catatan: harus huruf kapital L)

Ini akan mencantumkan semua server sql yang diinstal di jaringan Anda. Ada opsi konfigurasi yang dapat Anda atur untuk mencegah SQL Server ditampilkan di daftar. Untuk melakukan ini...

Di baris perintah:

svrnetcn

Dalam daftar protokol yang diaktifkan, pilih 'TCP / IP', lalu klik properti. Ada kotak centang untuk 'Sembunyikan server'.

George Mastros
sumber
2
Saya suka opsi baris perintah, tetapi saya mendapat hasil yang beragam ketika saya mencobanya di kotak pengembang (non-jaringan) saya; pada dasarnya "sqlcmd -L" adalah satu-satunya yang berfungsi, dan hanya jika Layanan Browser SQL Server berjalan. Apakah itu yang diharapkan?
Matt
Saya SUKA ketika itu SEDERHANA dan LURUS. Saya berjuang untuk menemukan nama server yang tepat untuk dimasukkan untuk contoh Amazon Web Service SQL Server. ThanX
Mehdi LAMRANI
1
Perintah yang bagus tetapi karena alasan tertentu mendeteksi instance SQLExpress pada jaringan yang dihitung tetapi gagal mendeteksi instance SQLExpress pada mesin lokal saya.
sparebytes
1
@sparebytes: alasan di sini: dba.stackexchange.com/questions/18499/…
DonBecker
Coba:C:\> sqllocaldb i
Contango
82

Anda bisa meminta nilai registri ini untuk mendapatkan versi SQL secara langsung:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\90\Tools\ClientSetup\CurrentVersion

Atau Anda dapat menanyakan nama instance Anda dan kemudian menggunakan sqlcmd dengan nama instance Anda yang Anda inginkan:

Untuk melihat nama contoh Anda:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names

Kemudian jalankan ini:

SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')

Jika Anda menggunakan C ++ Anda dapat menggunakan kode ini untuk mendapatkan informasi registri.

Brian R. Bondy
sumber
('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition') hanya menampilkan server, hanya menjalankan satu tetapi tidak instans atau diinstal tetapi menghentikan server
Gennady Vanin Геннадий Ванин
Terima kasih, kueri berhasil untuk saya. Saya punya mesin dan ingin tahu contoh default dan contoh SQL Express yang 2008 dan 2008 R2. Saya terhubung ke setiap instance dan menjalankan kueri dan itu memberi saya nomor versi. Googling angka itu mudah.
Meligy
3
Catatan, sepertinya "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ <version> \ Tools \ ClientSetup \ CurrentVersion" dan "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ Instance Names" muncul di bagian 32-bit dari registri, sedangkan jalur aktual ke instance: "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ <instancename>" muncul di Hive 64bit.
NGaida
Registri adalah definisi sumber dari perangkat lunak yang diinstal. Solusi Anda memungkinkan saya untuk langsung pergi ke sumbernya, daripada menggunakan alat CLI, yang pada akhirnya menggunakan nilai registri, atau snap-in MMC yang juga menggunakan registri. Perfect
barrypicker
76

Semua instal yang diinstal harus muncul di Layanan Snap-In di Microsoft Management Console. Untuk mendapatkan nama contoh, buka Mulai | Jalankan | ketik Services.msc dan cari semua entri dengan "Sql Server (Nama Instance)".

dotnetengineer
sumber
13
Perintah PowerShell Setara:Get-Service | ?{ $_.Name -like "MSSQL*" }
orad
2
Komputer saya menunjukkan MSSQL $ SQLEXPRESS berjalan dengan nama tampilan SQL Server (SQLEXPRESS) .... tetapi bagaimana cara memasukkan ini dalam nama server? Koneksi tes menunjukkan kesalahan seperti ... kesalahan terkait jaringan atau contoh spesifik terjadi ketika mencoba terhubung ke server sql
webzy
47

- T-SQL Query untuk menemukan daftar Instances Terpasang pada mesin

DECLARE @GetInstances TABLE
( Value nvarchar(100),
 InstanceNames nvarchar(100),
 Data nvarchar(100))

Insert into @GetInstances
EXECUTE xp_regread
  @rootkey = 'HKEY_LOCAL_MACHINE',
  @key = 'SOFTWARE\Microsoft\Microsoft SQL Server',
  @value_name = 'InstalledInstances'

Select InstanceNames from @GetInstances 
Mohammed Ifteqar Ahmed
sumber
Bagus Saya hanya berpikir itu diperlukan untuk terhubung sabukan?
jyz
3
+1 Sumber informasi tentang instance adalah sama dengan jawaban oleh Brian. Seseorang mungkin juga menulis kode C # untuk mendapatkan nilai dari Windows Registry; yang membuat saya berpikir jawabannya berlebihan untuk saat ini tetapi senang mengetahui tentang xp_regread. #Terima kasih.
Mzn
Hasil kueri hanya Nama Instans, Apakah mungkin menambahkan tingkat kompatibilitas untuk setiap instance ke hasil?
Marwan Almukh
16

Saya tahu utas ini agak lama, tetapi saya menemukan utas ini sebelum saya menemukan jawaban yang saya cari dan berpikir saya akan membagikannya. Jika Anda menggunakan SQLExpress (atau localdb) ada cara yang lebih sederhana untuk menemukan nama instance Anda. Pada tipe baris perintah:

> sqllocaldb i

Ini akan mencantumkan nama instance yang telah Anda instal secara lokal. Jadi nama server lengkap Anda harus menyertakan (localdb) \ di depan nama instance untuk terhubung. Juga, sqllocaldb memungkinkan Anda membuat instance baru atau menghapusnya serta mengonfigurasinya. Lihat: SqlLocalDB Utility .

John Denton
sumber
11

Jika Anda hanya ingin melihat apa yang diinstal pada mesin yang sedang Anda masuki, saya pikir proses manual yang paling mudah adalah dengan hanya membuka Manajer Konfigurasi Server SQL (dari menu Start), yang menampilkan semua Layanan SQL (dan hanya layanan SQL) pada perangkat keras itu (berjalan atau tidak). Ini mengasumsikan SQL Server 2005, atau lebih besar; Rekomendasi dotnetengineer untuk menggunakan Konsol Manajemen Layanan akan menampilkan semua layanan, dan harus selalu tersedia (jika Anda menjalankan versi SQL Server yang lebih lama, misalnya).

Namun, jika Anda mencari proses penemuan yang lebih luas, Anda dapat mempertimbangkan alat pihak ketiga seperti SQLRecon dan SQLPing, yang akan memindai jaringan Anda dan membuat laporan semua contoh Layanan SQL yang ditemukan di server mana pun yang mereka akses. Sudah lama sejak saya menggunakan alat seperti ini, tapi saya terkejut dengan apa yang mereka temukan (yaitu, beberapa contoh yang saya tidak tahu ada). YMMV. Anda mungkin Google untuk detail, tetapi saya percaya halaman ini memiliki unduhan yang relevan: http://www.sqlsecurity.com/Tools/FreeTools/tabid/65/Default.aspx

Mat
sumber
1
Manajer Konfigurasi SQL Server adalah persis apa yang saya butuhkan. Cepat dan mudah.
Chris
8

SQL Server mengizinkan aplikasi untuk menemukan contoh SQL Server dalam jaringan saat ini. Kelas SqlDataSourceEnumerator memaparkan informasi ini kepada pengembang aplikasi, menyediakan DataTable yang berisi informasi tentang semua server yang terlihat. Tabel yang dikembalikan ini berisi daftar instance server yang tersedia di jaringan yang cocok dengan daftar yang disediakan ketika pengguna mencoba membuat koneksi baru, dan memperluas daftar drop-down yang berisi semua server yang tersedia di kotak dialog Connection Properties. Hasil yang ditampilkan tidak selalu lengkap. Untuk mengambil tabel yang berisi informasi tentang instance SQL Server yang tersedia, Anda harus terlebih dahulu mengambil enumerator, menggunakan properti Instance bersama / statis:

using System.Data.Sql;

class Program
{
  static void Main()
  {
    // Retrieve the enumerator instance and then the data.
    SqlDataSourceEnumerator instance =
      SqlDataSourceEnumerator.Instance;
    System.Data.DataTable table = instance.GetDataSources();

    // Display the contents of the table.
    DisplayData(table);

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
  }

  private static void DisplayData(System.Data.DataTable table)
  {
    foreach (System.Data.DataRow row in table.Rows)
    {
      foreach (System.Data.DataColumn col in table.Columns)
      {
        Console.WriteLine("{0} = {1}", col.ColumnName, row[col]);
      }
      Console.WriteLine("============================");
    }
  }
}

dari msdn http://msdn.microsoft.com/en-us/library/a6t1z9x2(v=vs.80).aspx

Ian
sumber
saya perlu menentukan subnet pada domain ini, atau kembali nol untuk saya, dapatkah Anda memperbarui
transformer
1
Bagi mereka yang ingin menggunakan .NET Core, SqlDataSourceEnumeratorbelum diimplementasikan, tetapi ada dalam daftar yang akan ditambahkan sesuai dengan masalah GitHub .
Daniel Hill
5

SQL Server Browser Service http://msdn.microsoft.com/en-us/library/ms181087.aspx

Cade Roux
sumber
1
oops ... sqlbrowser.exe hilang dari lokasi biasa! Saya harus memiliki edisi Microsoft (yaitu yang tidak berfungsi) :-) Bercanda - kita semua mencintai Microsoft, hampir seperti ibu mertua saya.
Sam
5

Jika Anda tertarik untuk menentukan ini dalam skrip, Anda dapat mencoba yang berikut:

sc \\server_name query | grep MSSQL

Catatan: grep adalah bagian dari alat gnuwin32

Dale Sykora
sumber
3
Anda dapat menggunakan findstralih-alih grepuntuk ini.
Pablo Montilla
Anda juga dapat menggunakan, FIND, yang mengarah ke permintaan sc \\ server_name | CARI "MSSQL"
Julio Nobre
5

Dari baris perintah Windows, ketik:

SC \\server_name query | find /I "SQL Server ("

Di mana "server_name" adalah nama dari server jauh mana pun yang ingin Anda tampilkan contoh SQL.

Ini tentu saja memerlukan izin yang cukup.

jimbo
sumber
Tidak bekerja pada mesin dev saya, yang memiliki 2008 R2 dan beberapa contoh Express dan LocalDB berjalan.
Christoph
4

Kueri ini akan memberi Anda nama server dan nama instance:

SELECT @@SERVERNAME, @@SERVICENAME
Anonim
sumber
3
Ini hanya memberi tahu Anda nama instance saat ini yang terkait dengan permintaan eksekusi. OP meminta daftar semua instans yang terinstal
Jay Walker
1
Ini tidak memberikan informasi apa pun tentang versi SQL server mana yang diinstal
Ahmad
2

Saya memiliki masalah yang sama. Perintah "osql -L" hanya menampilkan daftar server tetapi tanpa nama instance (hanya instance SQL Sever lokal saya yang ditampilkan). Dengan Wireshark, sqlbrowser.exe (yang dapat ditemukan di folder bersama instalasi SQL Anda), saya menemukan solusi untuk masalah saya.

Contoh lokal diselesaikan dengan entri registri. Mesin virtual jarak jauh diselesaikan oleh siaran UDP (port 1434) dan SMB. Gunakan "sqlbrowser.exe -c" untuk mendaftar permintaan.

Konfigurasi saya menggunakan 1 adapter jaringan fisik dan 3 virtual. Jika saya menggunakan perintah "osql -L", sqlbrowser menampilkan permintaan dari salah satu adapter virtual (yang ada di segmen jaringan lain), bukan yang fisik. osql memilih adpater dengan metriknya. Anda dapat melihat metrik dengan perintah "route print". Untuk konfigurasi saya, tabel routing menunjukkan metrik yang lebih rendah untuk adaptor virtual kemudian untuk fisik. Jadi saya mengubah metrik antarmuka di properti jaringan dengan membatalkan pilihan metrik otomatis dalam pengaturan jaringan lanjutan. osql sekarang menggunakan adaptor fisik.

Daniel
sumber
2

Satu lagi pilihan adalah menjalankan laporan penemuan SQLSERVER..pergi ke media instalasi sqlserver dan klik dua kali setup.exe

masukkan deskripsi gambar di sini

dan di layar berikutnya, buka alat dan klik laporan penemuan seperti yang ditunjukkan di bawah ini

masukkan deskripsi gambar di sini

Ini akan menunjukkan kepada Anda semua contoh hadir bersama dengan seluruh fitur..di bawah ini adalah snapshot pada pc saya masukkan deskripsi gambar di sini

TheGameiswar
sumber
1

Saya baru saja menginstal Sql server 2008, tetapi saya tidak dapat terhubung ke instance database apa pun. Perintah @G Mastros yang diposting tidak mencantumkan instance aktif.

Jadi saya mencari layanan dan menemukan bahwa agen SQL server dinonaktifkan. Saya memperbaikinya dengan mengaturnya menjadi otomatis dan kemudian memulainya.

Moulde
sumber
1

Saya memiliki masalah yang sama ketika saya menilai 100+ server, saya memiliki skrip yang ditulis dalam C # untuk menelusuri nama layanan yang terdiri dari SQL. Ketika contoh diinstal pada server, SQL Server menambahkan layanan untuk setiap contoh dengan nama layanan. Ini dapat bervariasi untuk versi yang berbeda seperti 2000 hingga 2008 tetapi pasti ada layanan dengan nama instance.

Saya mengambil nama layanan dan mendapatkan nama contoh dari nama layanan. Berikut adalah contoh kode yang digunakan dengan Hasil Kueri WMI:

if (ServiceData.DisplayName == "MSSQLSERVER" || ServiceData.DisplayName == "SQL Server (MSSQLSERVER)")
            {
                InstanceData.Name = "DEFAULT";
                InstanceData.ConnectionName = CurrentMachine.Name;
                CurrentMachine.ListOfInstances.Add(InstanceData);
            }
            else
                if (ServiceData.DisplayName.Contains("SQL Server (") == true)
                {
                    InstanceData.Name = ServiceData.DisplayName.Substring(
                                            ServiceData.DisplayName.IndexOf("(") + 1,
                                            ServiceData.DisplayName.IndexOf(")") - ServiceData.DisplayName.IndexOf("(") - 1
                                        );
                    InstanceData.ConnectionName = CurrentMachine.Name + "\\" + InstanceData.Name;
                    CurrentMachine.ListOfInstances.Add(InstanceData);
                }
                else
                    if (ServiceData.DisplayName.Contains("MSSQL$") == true)
                    {
                        InstanceData.Name = ServiceData.DisplayName.Substring(
                                                ServiceData.DisplayName.IndexOf("$") + 1,
                                                ServiceData.DisplayName.Length - ServiceData.DisplayName.IndexOf("$") - 1
                                            );

                        InstanceData.ConnectionName = CurrentMachine.Name + "\\" + InstanceData.Name;
                        CurrentMachine.ListOfInstances.Add(InstanceData);
                    }
AbuTaareq
sumber
0

Berikut adalah metode sederhana: pergi ke Mulai kemudian Program kemudian Microsoft SQL Server 2005 lalu Alat Konfigurasi kemudian Manajer Konfigurasi Server SQL lalu Konfigurasi Jaringan SQL Server 2005 lalu Di sini Anda dapat menemukan semua contoh diinstal ke mesin Anda.

Badar
sumber
0

Saya tahu ini adalah posting lama tapi saya menemukan solusi yang bagus dengan PoweShell di mana Anda dapat menemukan contoh SQL diinstal pada mesin lokal atau jarak jauh termasuk versi dan juga akan mendapatkan properti lainnya.

$MachineName = ‘.’ # Default local computer Replace . with server name for a remote computer

$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey(‘LocalMachine’, $MachineName)
$regKey= $reg.OpenSubKey("SOFTWARE\\Microsoft\\Microsoft SQL Server\\Instance Names\\SQL" )
$values = $regkey.GetValueNames()
$values | ForEach-Object {$value = $_ ; $inst = $regKey.GetValue($value); 
              $path = "SOFTWARE\\Microsoft\\Microsoft SQL Server\\"+$inst+"\\MSSQLServer\\"+"CurrentVersion";
              #write-host $path; 
              $version = $reg.OpenSubKey($path).GetValue("CurrentVersion");
                          write-host "Instance" $value;
              write-host  "Version" $version}
akhila vangala
sumber
hai ini hebat bagaimana, bisakah saya membungkus ini di dalam kelas C # atau bagaimana menyebutnya dari kode
transformator
Hai. Ini adalah upaya pertama saya di PowerShell, jadi bantuan Anda akan dihargai. Saya mendapatkan kesalahan berikut jika saya mencoba dan menjalankan skrip ini. Apakah ini akan menemukan semua server sql jarak jauh? Saya mencoba menyusun daftar SQL Server dan basis datanya. Anda tidak dapat memanggil metode pada ekspresi bernilai nol. + $ values ​​= $ regkey.GetValueNames ()
Darryl Wilson
0

Perintah OSQL -Ldan SQLCMD -Lakan menampilkan semua contoh di jaringan .

Jika Anda ingin memiliki daftar semua instance di server dan tidak merasa ingin melakukan scripting atau pemrograman, lakukan ini:

  1. Mulai Windows Task Manager
  2. Centang kotak "Tampilkan proses dari semua pengguna" atau yang setara
  3. Urutkan proses dengan "Nama Gambar"
  4. Temukan semua sqlsrvr.exegambar

Mesin virtual harus didaftar di kolom "Nama Pengguna" sebagai MSSQL$INSTANCE_NAME.

Dan saya beranjak dari berpikir bahwa server yang buruk menjalankan 63 instance menjadi menyadari bahwa server tersebut menjalankan tiga (yang salah satunya berperilaku seperti pengganggu total dengan beban CPU ...)

Erk
sumber
0

Akan mendapatkan contoh permintaan reg SQL server "HKLM \ Software \ Microsoft \ Microsoft SQL Server \ Nama Instance \ SQL"

atau Gunakan SQLCMD -L

siva
sumber
-1

Jika dalam SSMS Anda, Anda mungkin merasa lebih mudah untuk menggunakan:

SELECT @@Version
Craig
sumber
3
Pertanyaan itu sendiri menyatakan mereka tidak ingin / tidak dapat menggunakan query SQL untuk menentukan versi
Trotski94