Detectar SQL Express De TSQL
-
16-09-2019 - |
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.
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.
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.