web-dev-qa-db-ja.com

インストールされているSQL Serverインスタンスとそのバージョンを確認する方法を教えてください。

どのSQL Server/SQL Expressのインスタンスを手動またはプログラムでインストールしようとしているのでしょうか。 。

211
Luke

コマンドラインで:

SQLCMD -L

または

OSQL -L

(注:大文字のLにする必要があります)

これはあなたのネットワークにインストールされているすべてのSQLサーバーをリストします。 SQL Serverがリストに表示されないように設定できる設定オプションがあります。これをする...

コマンドラインで:

svrnetcn

有効になっているプロトコルの一覧から[TCP/IP]を選択し、[プロパティ]をクリックします。 [サーバーを隠す]のチェックボックスがあります。

191
G Mastros

SQLバージョンを直接取得するためにこのレジストリ値を問い合わせることができます。

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

あるいは、インスタンス名を照会してから、希望のインスタンス名を付けてsqlcmdを使用することもできます。

インスタンス名を確認するには

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

それからこれを実行してください:

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

C++を使用している場合は、このコードを使用してレジストリ情報を取得できます。

79
Brian R. Bondy

インストールされたすべてのインスタンスは、Microsoft管理コンソールのサービススナップインに表示されます。インスタンス名を取得するには、[スタート]メニューから[開始]をクリックします。実行| Services.mscを入力し、「Sql Server(Instance Name)」を持つすべてのエントリを探します。

72
dotnetengineer

- マシンにインストールされているインスタンスのリストを検索するためのT-SQLクエリ

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 

現在ログインしているマシンに何がインストールされているのかを確認するには、最も簡単な手動プロセスは、[スタート]メニューから[SQL Server構成マネージャ]を開くことです。そのハードウェア上でのみSQLサービス)(実行中かどうかにかかわらず)。これはSQL Server 2005以降を想定しています。 dotnetengineer のサービス管理コンソールの使用を推奨すると、すべてのサービスが表示され、常に使用可能になります(以前のバージョンのSQL Serverを実行している場合)。 、 例えば)。

ただし、より広範な検出プロセスを探している場合は、SQLReconやSQLPingなど、サードパーティ製のツールを検討してください。これらのツールは、ネットワークをスキャンし、アクセス権のあるサーバーで見つかったすべてのSQL Serviceインスタンスのレポートを作成します。私はこのようなツールを使用してからしばらく経ちましたが、それらが見つけたものに驚きました(つまり、私が存在していなかったほんの一握りのインスタンス)。 YMMVあなたは詳細についてはGoogleかもしれませんが、私はこのページが関連ダウンロードを持っていると思います: http://www.sqlsecurity.com/Tools/FreeTools/tabid/65/Default.aspx

11
Matt

私はこのスレッドが少し古くなっているのを知っています、しかし、私が探していた答えを見つけて私が共有しようと思った前にこのスレッドに出会いました。 SQLExpress(またはlocaldb)を使用している場合は、インスタンス名を見つけるためのより簡単な方法があります。コマンドラインで次のように入力します。

> sqllocaldb i

これにより、ローカルにインストールしたインスタンス名が一覧表示されます。そのため、フルサーバー名には、接続するインスタンス名の前に(localdb)\を含める必要があります。また、sqllocaldbを使用すると、新規インスタンスを作成したり、それらを削除したり、それらを構成したりすることができます。 SqlLocalDBユーティリティ を参照してください。

10
John Denton

SQL Serverでは、アプリケーションは現在のネットワーク内でSQL Serverインスタンスを見つけることができます。 SqlDataSourceEnumeratorクラスはこの情報をアプリケーション開発者に公開し、すべての可視サーバーに関する情報を含むDataTableを提供します。この返されたテーブルには、ユーザーが新しい接続を作成しようとしたときに表示されるリストと一致するネットワーク上で使用可能なサーバーインスタンスのリストが含まれ、[接続プロパティ]ダイアログボックスで使用可能なすべてのサーバーを含むドロップダウンリストが展開されます。表示される結果は必ずしも完全ではありません。利用可能なSQL Serverインスタンスに関する情報を含むテーブルを取得するには、まず共有/静的Instanceプロパティを使用して列挙子を取得する必要があります。

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("============================");
    }
  }
}

msdnから http://msdn.Microsoft.com/ja-jp/library/a6t1z9x2(v = vs.80).aspx

6
Ian
5
Cade Roux

Windowsのコマンドラインから、次のように入力します。

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

"server_name"は、SQLインスタンスを表示したい任意のリモートサーバーの名前です。

これにはもちろん十分な権限が必要です。

5
jimbo

あなたがスクリプトでこれを決定することに興味があるなら、あなたは以下を試すことができます:

sc \\server_name query | grep MSSQL

注:grepはgnuwin32ツールの一部です

4
Dale Sykora

私は同じ問題を抱えていました。 "osql -L"コマンドはサーバーのリストのみを表示し、インスタンス名は表示しませんでした(ローカルのSQL Serverのインスタンスのみが表示されていました)。 Wiresharkでは、sqlbrowser.exe(SQLインストールの共有フォルダにあります)で、私は私の問題に対する解決策を見つけました。

ローカルインスタンスはレジストリエントリによって解決されます。リモートインスタンスはUDPブロードキャスト(ポート1434)とSMBによって解決されます。リクエストを一覧表示するには、 "sqlbrowser.exe -c"を使用します。

私の設定では、1つの物理ネットワークアダプタと3つの仮想ネットワークアダプタを使用しています。 「osql -L」コマンドを使用した場合、sqlbrowserは物理的なアダプタではなく、仮想アダプタの1つ(別のネットワークセグメントにある)からの要求を表示しました。 osqlは、そのメトリックによってアダプタを選択します。あなたはコマンド "route print"でメトリックを見ることができます。私の設定では、ルーティングテーブルは物理アダプタの仮想アダプタよりも低いメトリックを示していました。そのため、ネットワークの詳細設定で自動メトリックを選択解除して、ネットワークプロパティのインターフェースメトリックを変更しました。 osqlは現在、物理アダプタを使用しています。

2
Daniel

このクエリはあなたにサーバ名とインスタンス名を取得するはずです。

SELECT @@SERVERNAME, @@SERVICENAME
2
Anonymous

SQL Server 2008をインストールしましたが、どのデータベースインスタンスにも接続できませんでした。 @G Mastrosが投稿したコマンドはアクティブなインスタンスをリストしていません。

だから私はサービスを調べて、SQLサーバーエージェントが無効になっていることがわかりました。自動に設定して起動して修正しました。

1
Moulde

私が100以上のサーバーを評価していたときに私はこれと同じ問題を抱えていました、私はC#で書かれたサービス名を閲覧するために書かれたスクリプトを持っていました。インスタンスがサーバーにインストールされると、SQL Serverは各インスタンスのサービスをサービス名で追加します。それは2000年から2008年のような異なるバージョンのために異なるかもしれませんが、確かにインスタンス名を持つサービスがあります。

サービス名を取得し、そのサービス名からインスタンス名を取得します。これは、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);
                    }
1
AbuTaareq

あなたのSSMSの中であなたがそれが使いやすいと思うかもしれない:

SELECT @@Version
0
Craig

簡単な方法は次のとおりです。[スタート]、[プログラム]、[Microsoft SQL Server 2005]、[構成ツール]、[SQL Server構成マネージャ]、[SQL Server 2005ネットワークの構成]の順に選択します。

0
Badar

私はその古い投稿を知っていますが、そのバージョンを含むローカルまたはリモートマシンにインストールされたSQLインスタンスを見つけることができ、また他のプロパティを拡張することができるPoweShellを使ったNiceソリューションを見つけました。

$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}
0
akhila vangala

もう1つの選択肢は、SQLSERVER discovery report..sqlserverのインストールメディアにアクセスし、setup.exeをダブルクリックすることです。

enter image description here

次の画面で、ツールに移動し、以下に示すように検出レポートをクリックします

enter image description here

これはあなたに全体の機能と一緒に存在するすべてのインスタンスを表示します..以下は私のPC上のスナップショットです enter image description here

0
TheGameiswar