2013-08-06 18 views

Odpowiedz

108

Wystarczy znaleźć odpowiedź, w this SO question (dosłownie wewnątrz pytanie, nie każda odpowiedź):

SELECT @@servername 

powraca nazwa_serwera \ instancji miarę nie jest to domyślne wystąpienie:

SELECT @@servicename 

powraca nazwa instancji, nawet jeśli jest to domyślne (MSSQLSERVER)

+3

Podaje mi tylko nazwę serwera, a nie nazwę wystąpienia. Serwer\??? – Steam

+1

@ blasto, które wydaje się być zachowanie, gdy wystąpienie jest domyślne na serwerze. Spróbuj z nazwanym wystąpieniem. Sprawdź to: http://technet.microsoft.com/en-us/library/ms187944.aspx –

+4

Niepoprawnie, użyj @@ servername, która może dać ci złą odpowiedź.SELECT CONVERT (sysname, SERVERPROPERTY ('servername')) jest poprawną odpowiedzią. Parametr @@ nazwa_serwera zgłasza nazwę klastra SQL, a właściwość serverproperty ("nazwa_serwera") zgłasza nazwę klastra systemu Windows. Nazwa klastra systemu Windows wymaga połączenia z bazą danych (nazwa klastra systemu Windows może być inna niż nazwa klastra SQL, co zwykle ma miejsce, gdy instalujesz nową wersję serwera sql na innym komputerze (@@ servername = Environment.MachineName) i chcesz zachować starą nazwę, abyś nie musiał zmieniać wszystkich konfiguracji). –

12

Jak o tym:

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

ten otrzyma nazwę instancji, jak również. null oznacza domyślną instancję:

SELECT SERVERPROPERTY ('InstanceName') 

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

+9

SELECT SERVERPROPERTY ('InstanceName') daje mi NULL. – Steam

+2

zamiast tego użyj SELECT CONVERT (sysname, SERVERPROPERTY ('servername')); –

+0

@Steam: Prawdopodobnie dlatego, że jest domyślną instancją. –

7

SELECT @@servername daje dane jako server/instanceName

Aby dostać tylko instanceName należy uruchomić select @@ServiceName zapytania.

+0

Po pierwsze, masz ukośnik w niewłaściwy sposób. Poprawną formą jest "server \ instance". Po drugie, nie zawsze jest prawdą, że @@ servername da ci zarówno serwer, jak i instancję, ponieważ gdy istnieje tylko jedna instancja, zwróci ona tylko "serwer". – Robino

6

Znalazłem to:

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

To da ci listę wszystkich przypadkach zainstalowanych w serwerze.


Majątek SERVERPROPERTY funkcji i @@SERVERNAME powrotnej podobnych informacji ServerName. Właściwość ServerName udostępnia serwer Windows i nazwę instancji, które razem tworzą unikalną instancję serwera. @@SERVERNAME udostępnia aktualnie skonfigurowaną nazwę lokalnego serwera.

i Microsoft przykładem dla bieżącego serwera jest:

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

Ten scenariusz jest przydatna, gdy istnieje wiele instancji SQL Server zainstalowane na serwerze Windows, a klient musi otworzyć kolejne połączenie do ta sama instancja używana przez bieżące połączenie.

+0

SELECT CONVERT (sysname, SERVERPROPERTY ('servername')); jest poprawną odpowiedzią –

3

Dlaczego warto zatrzymać się pod samą nazwą instancji? Możesz dokonać inwentaryzacji środowiska SQL Server, wykonując następujące czynności:

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 
Powiązane problemy