T-SQL'den mevcut örnek adı nasıl alınır


91

Bir T-SQL komut dosyası kullanarak SQL Server sunucusunu ve geçerli bağlantının örnek adını nasıl alabilirim?


Kabul edilen cevap doğrudur. SELECT @@SERVERNAMEkullanarak bağlanmak için gereken sonucu üretir sqlcmd -S. Varsayılan MSSQLSERVER örneğiyse, -S parametresinde belirtilmemelidir. Bu, 2017 14.0.2002.14 Developer sürümünde, 64-bit.
yaktı

Yanıtlar:


166

Cevabı sadece bu SO sorusunda buldum (kelimenin tam anlamıyla, sorunun içinde, herhangi bir cevap değil):

SELECT @@servername

bu varsayılan örnek olmadığı sürece sunucuadı \ örnek döndürür

SELECT @@servicename

bu varsayılan bile olsa örnek adını döndürür (MSSQLSERVER)


1
@blasto, sunucuda örnek varsayılan olduğunda davranış gibi görünüyor. Adlandırılmış bir örnekle deneyin. Şunu
Guillermo Gutiérrez

10
Yanlış, @@ sunucuadı kullanmak size yanlış bir yanıt verebilir. SELECT CONVERT (sysname, SERVERPROPERTY ('sunucuadı')) doğru cevaptır. @@ SunucuAdı SQL küme adını bildirirken, sunucu özelliği ('sunucuadı') Windows küme adını bildirir. Veritabanınıza bağlanmak için Windows küme adına ihtiyacınız var (Windows küme adı, SQL küme adından farklı olabilir; Bu genellikle farklı bir makineye (@@ servername = Environment.MachineName) yeni bir sql-server sürümü yüklediğinizde gerçekleşir ve tüm yapılandırmaları değiştirmek zorunda kalmamak için eski adı korumak istersiniz).
Stefan Steiger

1
@StefanSteiger Bağlantılı SO sorusunun kabul edilen yanıtı sunduğunuz çözümü gösterir, ancak yorumlar bazı kişilerde işe yaramadığını gösterir.
2016

17

Buna ne dersin:

EXECUTE xp_regread @rootkey='HKEY_LOCAL_MACHINE',
                   @key='SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQl',
                   @value_name='MSSQLSERVER'

Bu, örnek adını da alacaktır. nullvarsayılan örnek anlamına gelir:

SELECT SERVERPROPERTY ('InstanceName')

http://technet.microsoft.com/en-us/library/ms174396.aspx


10
SELECT SERVERPROPERTY ('ÖrnekAdı') bana bir NULL veriyor.
Steam

4
bunun yerine SELECT CONVERT (sysname, SERVERPROPERTY ('sunucuadı')) kullanın;
Stefan Steiger

1
@Steam: Muhtemelen varsayılan örnek olduğu için.
Stefan Steiger

10

SELECT @@servername size veri verecek server/instanceName

Yalnızca instanceNamesiz almak için select @@ServiceNamesorguyu çalıştırmalısınız .


İlk olarak, eğik çizgiyi yanlış yöne çeviriyorsunuz. Doğru biçim "sunucu \ örnek" dir. İkincisi, @@ sunucuadı size hem sunucuyu hem de örneği vereceği için her zaman doğru değildir çünkü yalnızca tek bir örnek olduğunda yalnızca "sunucu" döndürür.
Robino

9

Neden sadece örnek adında duralım? SQL Server ortamınızın envanterini aşağıdakilerle yapabilirsiniz:

SELECT  
    SERVERPROPERTY('ServerName') AS ServerName,  
    SERVERPROPERTY('MachineName') AS MachineName,
    CASE 
        WHEN  SERVERPROPERTY('InstanceName') IS NULL THEN ''
        ELSE SERVERPROPERTY('InstanceName')
    END AS InstanceName,
    '' as Port, --need to update to strip from Servername. Note: Assumes Registered Server is named with Port
    SUBSTRING ( (SELECT @@VERSION),1, CHARINDEX('-',(SELECT @@VERSION))-1 ) as ProductName,
    SERVERPROPERTY('ProductVersion') AS ProductVersion,  
    SERVERPROPERTY('ProductLevel') AS ProductLevel,
    SERVERPROPERTY('ProductMajorVersion') AS ProductMajorVersion,
    SERVERPROPERTY('ProductMinorVersion') AS ProductMinorVersion,
    SERVERPROPERTY('ProductBuild') AS ProductBuild,
    SERVERPROPERTY('Edition') AS Edition,
    CASE SERVERPROPERTY('EngineEdition')
        WHEN 1 THEN 'PERSONAL'
        WHEN 2 THEN 'STANDARD'
        WHEN 3 THEN 'ENTERPRISE'
        WHEN 4 THEN 'EXPRESS'
        WHEN 5 THEN 'SQL DATABASE'
        WHEN 6 THEN 'SQL DATAWAREHOUSE'
    END AS EngineEdition,  
    CASE SERVERPROPERTY('IsHadrEnabled')
        WHEN 0 THEN 'The Always On Availability Groups feature is disabled'
        WHEN 1 THEN 'The Always On Availability Groups feature is enabled'
        ELSE 'Not applicable'
    END AS HadrEnabled,
    CASE SERVERPROPERTY('HadrManagerStatus')
        WHEN 0 THEN 'Not started, pending communication'
        WHEN 1 THEN 'Started and running'
        WHEN 2 THEN 'Not started and failed'
        ELSE 'Not applicable'
    END AS HadrManagerStatus,
    CASE SERVERPROPERTY('IsSingleUser') WHEN 0 THEN 'No' ELSE 'Yes' END AS InSingleUserMode,
    CASE SERVERPROPERTY('IsClustered')
        WHEN 1 THEN 'Clustered'
        WHEN 0 THEN 'Not Clustered'
        ELSE 'Not applicable'
    END AS IsClustered,
    '' as ServerEnvironment,
    '' as ServerStatus,
    '' as Comments

1
İyi Şeyler Nate, Bende de aynı şeyi yapan daha gelişmiş bir Envanter komut dosyası var. e-posta yoluyla bir kopya için benimle iletişime geçin ... Komut dosyası bu konu için odak dışı kalır.
Hank Freeman

8

Bunu buldum:

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

Bu size sunucunuzda kurulu olan tüm örneklerin listesini verecektir.


ServerNameMülkiyet SERVERPROPERTYfonksiyonu ve @@SERVERNAMEbenzer bilgileri döndürür. ServerNameMülkiyet birlikte benzersiz sunucu örneğini oluşturan Windows sunucu ve örnek adı sağlar. @@SERVERNAMEşu anda yapılandırılmış yerel sunucu adını sağlar.

Ve mevcut sunucu için Microsoft örneği:

SELECT CONVERT(sysname, SERVERPROPERTY('servername'));

Bu senaryo, bir Windows sunucusunda birden çok SQL Server örneği yüklendiğinde ve istemcinin geçerli bağlantı tarafından kullanılan aynı örneğe başka bir bağlantı açması gerektiğinde kullanışlıdır.


CONVERT SEÇİN (sysname, SERVERPROPERTY ('sunucuadı')); doğru cevap
Stefan Steiger

2

Bağlandığınız sunucu ve örneğin listesini almak için:

select * from Sys.Servers

Bağlı sunucunun sahip olduğu veritabanlarının listesini almak için:

SELECT * from sys.databases;

1

Sadece kayıt sorgularına biraz açıklama eklemek için. Yalnızca geçerli örnek için eşleşen bitlik örneklerini (32 veya 64) listeler.

64 bit işletim sisteminde 32 bit SQL örnekleri için gerçek kayıt defteri anahtarı şu şekildedir:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server

Tüm 32 bit örnekleri almak için bunu 64 bitlik bir örnekte sorgulayabilirsiniz. 32 bitlik örnek Wow6432Node ile sınırlı göründüğü için 64 bit kayıt defteri ağacını okuyamıyor.


0

Örnek adını bulmak için başka bir yöntem - Veritabanı adı üzerinde sağ tıklayın ve Özellikler'i seçin, bu bölümde sol alt köşede bağlantı özelliklerini görüntüleyebilir, buna tıklayın, ardından Örnek adını görebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.