Detectar Sql Express A partir de TSQL
-
16-09-2019 - |
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.
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.
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.