どのSQL Server/SQL Expressのインスタンスを手動またはプログラムでインストールしようとしているのでしょうか。 。
コマンドラインで:
SQLCMD -L
または
OSQL -L
(注:大文字のLにする必要があります)
これはあなたのネットワークにインストールされているすべてのSQLサーバーをリストします。 SQL Serverがリストに表示されないように設定できる設定オプションがあります。これをする...
コマンドラインで:
svrnetcn
有効になっているプロトコルの一覧から[TCP/IP]を選択し、[プロパティ]をクリックします。 [サーバーを隠す]のチェックボックスがあります。
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')
インストールされたすべてのインスタンスは、Microsoft管理コンソールのサービススナップインに表示されます。インスタンス名を取得するには、[スタート]メニューから[開始]をクリックします。実行| Services.mscを入力し、「Sql Server(Instance Name)」を持つすべてのエントリを探します。
- マシンにインストールされているインスタンスのリストを検索するための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
私はこのスレッドが少し古くなっているのを知っています、しかし、私が探していた答えを見つけて私が共有しようと思った前にこのスレッドに出会いました。 SQLExpress(またはlocaldb)を使用している場合は、インスタンス名を見つけるためのより簡単な方法があります。コマンドラインで次のように入力します。
> sqllocaldb i
これにより、ローカルにインストールしたインスタンス名が一覧表示されます。そのため、フルサーバー名には、接続するインスタンス名の前に(localdb)\を含める必要があります。また、sqllocaldbを使用すると、新規インスタンスを作成したり、それらを削除したり、それらを構成したりすることができます。 SqlLocalDBユーティリティ を参照してください。
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
SQL Serverブラウザサービス http://msdn.Microsoft.com/ja-jp/library/ms181087.aspx
Windowsのコマンドラインから、次のように入力します。
SC \\server_name query | find /I "SQL Server ("
"server_name"は、SQLインスタンスを表示したい任意のリモートサーバーの名前です。
これにはもちろん十分な権限が必要です。
あなたがスクリプトでこれを決定することに興味があるなら、あなたは以下を試すことができます:
sc \\server_name query | grep MSSQL
注:grepはgnuwin32ツールの一部です
私は同じ問題を抱えていました。 "osql -L"コマンドはサーバーのリストのみを表示し、インスタンス名は表示しませんでした(ローカルのSQL Serverのインスタンスのみが表示されていました)。 Wiresharkでは、sqlbrowser.exe(SQLインストールの共有フォルダにあります)で、私は私の問題に対する解決策を見つけました。
ローカルインスタンスはレジストリエントリによって解決されます。リモートインスタンスはUDPブロードキャスト(ポート1434)とSMBによって解決されます。リクエストを一覧表示するには、 "sqlbrowser.exe -c"を使用します。
私の設定では、1つの物理ネットワークアダプタと3つの仮想ネットワークアダプタを使用しています。 「osql -L」コマンドを使用した場合、sqlbrowserは物理的なアダプタではなく、仮想アダプタの1つ(別のネットワークセグメントにある)からの要求を表示しました。 osqlは、そのメトリックによってアダプタを選択します。あなたはコマンド "route print"でメトリックを見ることができます。私の設定では、ルーティングテーブルは物理アダプタの仮想アダプタよりも低いメトリックを示していました。そのため、ネットワークの詳細設定で自動メトリックを選択解除して、ネットワークプロパティのインターフェースメトリックを変更しました。 osqlは現在、物理アダプタを使用しています。
このクエリはあなたにサーバ名とインスタンス名を取得するはずです。
SELECT @@SERVERNAME, @@SERVICENAME
SQL Server 2008をインストールしましたが、どのデータベースインスタンスにも接続できませんでした。 @G Mastrosが投稿したコマンドはアクティブなインスタンスをリストしていません。
だから私はサービスを調べて、SQLサーバーエージェントが無効になっていることがわかりました。自動に設定して起動して修正しました。
私が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);
}
あなたのSSMSの中であなたがそれが使いやすいと思うかもしれない:
SELECT @@Version
簡単な方法は次のとおりです。[スタート]、[プログラム]、[Microsoft SQL Server 2005]、[構成ツール]、[SQL Server構成マネージャ]、[SQL Server 2005ネットワークの構成]の順に選択します。
私はその古い投稿を知っていますが、そのバージョンを含むローカルまたはリモートマシンにインストールされた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}