Pergunta

Eu preciso de um seguro (ou seja consistente, robusta) forma de detectar se ou não o sql server Eu estou acessando é SQL Express. Eu acho que eu prefiro ser capaz de fazer isso a partir TSQL, pois já tenho uma seqüência de conexão e todas as bibliotecas que eu preciso para executar TSQL (isto deve ajudar questões evitar com se ou não WMI está instalado / executado, o usuário tem permissões para acessar o registro etc).

Alguém sabe de uma maneira de fazer isso?

Graças.

PS: Basicamente, eu quero fazer isso para que eu possa acompanhar o meu tamanho do banco contra o limite de 4 GB e tomar medidas quando eu abordá-lo ... mas se eu estou correndo em uma edição completa Sql Server, em seguida, eu não quero o código se preocupar com isso, pois não há (prático) limite codificado. Eu poderia colocar em uma configuração manual no meu programa, mas seria muito melhor se o código apenas fez a coisa certa automaticamente, daí a necessidade de saber se o servidor estiver edição do 'Express' ou não.

Foi útil?

Solução

Há uma série de maneiras:

EXEC sp_server_info 2

ou

SELECT @@version

ou

SELECT serverproperty('ProductVersion')

Você também pode fazer isso:

DECLARE @ver nvarchar(128)
SET @ver = CAST(serverproperty('ProductVersion') AS nvarchar)
SET @ver = SUBSTRING(@ver, 1, CHARINDEX('.', @ver) - 1)
IF ( @ver = '8' )
   SELECT 'SQL Server 2000'
ELSE IF ( @ver = '9' )
   SELECT 'SQL Server 2005'
ELSE
   SELECT 'Unsupported SQL Server Version'

Mais informações em: http: //blog.devstone .com / Aaron / default, data, 2006-12-15.aspx

Outras dicas

Use

SELECT SERVERPROPERTY('EditionID')

ou

SELECT SERVERPROPERTY('Edition')

para detectar qual a versão do SQL Server está em execução.

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

Isso irá retornar 0 se não é, e algo diferente de zero (126 aqui) se:

select charindex('Express Edition',@@version)

Exemplo num contexto booleana:

if (select charindex('Express Edition',@@version)) > 0
    begin
        print 'Express edition!'
    end
else
    begin
        print 'Not Express edition!'
    end

Você pode usar SERVERPROPERTY('Edition') que irá retornar "Express Edition"

O SERVERPROPERTY função já foi mencionada em várias outras respostas, mas há uma solução melhor do que verificar se uma string contém "Express Edition":. o argumento EngineEdition, que retorna um valor int

Citar a partir do link:

EngineEdition

edição Database Engine da instância do SQL Server instalado no servidor.

1 = Pessoal ou Desktop Engine (Não está disponível no SQL Server 2005 e versões posteriores).

2 = Padrão (Este é devolvido para a Standard, Web, e Negócios Intelligence.)

3 = Empresa (Este é devolvido para avaliação, Developer, e ambos edições Enterprise).

4 = Express (Este é devolvido para Express, Express com Tools e Express com Advanced Services)

5 = banco de dados SQL

6 - SQL Data Warehouse

Base de dados de tipo de dados: int

Assim você pode verificar se há Express Edition como esta:

if SERVERPROPERTY('EngineEdition') = 4
    begin
        select 'Express'
    end
else
    begin
        select 'not Express'
    end

O que acontece no SQL Server Express se você não monitorar o tamanho, mas chegar ao limite? Há avisos em primeiro lugar? Eventos no log de eventos?

Se sim, então você pode fazer melhor para permitir que SQL Server para emitir os avisos, e em seguida, basta ouvi-los. O mesmo poderia aplicar-se para uma instalação do SQL Server Enterprise quando um disco estiver cheio.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top