Pregunta

Necesito una manera segura (es decir, consistente, robusta) de detectar si existe o no el servidor SQL que estoy accediendo es SQL Express. Creo que preferiría ser capaz de hacer esto desde TSQL, pues ya tengo una cadena de conexión y todas las bibliotecas que necesito para ejecutar TSQL (esto debería ayudar a evitar problemas con si o no está instalado WMI / marcha, el usuario tiene permisos de acceso al registro, etc).

¿Alguien sabe de una manera de hacer esto?

Gracias.

PS: Básicamente quiero hacer esto para que pueda controlar el tamaño de mi base de datos para el límite de 4 GB y tomar medidas cuando me acerco a ella ... pero si estoy corriendo en una edición completa, SQL Server no quiero el código para preocuparse por ello ya que no hay (práctica) límite duro codificado. Podría poner en un ajuste manual en mi programa, pero sería mucho mejor si el código sólo hizo lo correcto de forma automática, por lo tanto, la necesidad de saber si el servidor es la edición 'expreso' o no.

¿Fue útil?

Solución

Hay un número de maneras:

EXEC sp_server_info 2

o

SELECT @@version

o

SELECT serverproperty('ProductVersion')

También puede hacer esto:

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'

Más información en: http: //blog.devstone .com / Aaron / defecto, la fecha, 2006-12-15.aspx

Otros consejos

Uso

SELECT SERVERPROPERTY('EditionID')

o

SELECT SERVERPROPERTY('Edition')

para detectar qué versión de SQL Server se está ejecutando.

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

Esto devolverá 0 si no lo es, y algo distinto de cero (126 aquí) si es:

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

Ejemplo en un contexto booleano:

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

Puede utilizar SERVERPROPERTY('Edition') que devolverá "Express Edition"

El SERVERPROPERTY función ya se ha mencionado en varias otras respuestas, pero hay una solución mejor que comprobar si una cadena contiene "Express Edition":. EngineEdition el argumento, que devuelve un valor int

Cita desde el enlace:

  

EngineEdition

     

edición del motor de base de datos de la instancia de SQL Server instalado en el   servidor.

     

1 = Personal o Desktop Engine (No disponible en SQL Server 2005 y   versiones posteriores.)

     

2 = Estándar (Esto se devuelve para Standard, Web y de negocios   Intelligence.)

     

3 = Empresa (Este es devuelto para su evaluación, desarrollador, y ambos   ediciones Enterprise.)

     

4 = Express (Esto es devuelto por Express, Express con herramientas y   Express con Advanced Services)

     

5 = SQL base de datos

     

6 - Almacén de datos SQL

     

tipo de datos Base: int

Así se puede comprobar la edición expresa de esta manera:

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

¿Qué ocurre en SQL Server Express si no controlar el tamaño, pero consigue hasta el límite? ¿Hay advertencias en primer lugar? Eventos en el registro de eventos?

Si es así, entonces es posible hacer mejor permitir que SQL Server para la emisión de las advertencias, y luego simplemente escucharlos. Lo mismo se podría aplicar perfectamente para una instalación de SQL Server Enterprise si un disco se llena.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top