3 formas de obtener la versión de SQL Server desde T-SQL
En un mundo perfecto todas nuestras instalaciones tendrían las mismas versiones de las aplicaciones, motores de bases de datos y librerías auxiliares, pero como este mundo es una utopía, a veces tenemos que averiguar con qué versión del motor de base de datos está trabajando la aplicación.
En el caso de SQL Server he descubierto 3 formas de averiguar la versión desde T-SQL, con cualquiera obtendremos la versión completa pero en la mayoría de los casos únicamente nos interesará la major release para ejecutar o no características de las nuevas versiones o que están obsoletas en la última versión pero siguen funcionando en versiones antiguas.
Vamos con las 3 opciones:
@@VERSION
http://msdn.microsoft.com/es-es/library/ms177512.aspx
Como es una variable de sistema sirve para cualquier versión de SQL Server, pero a partir de la versión 2005 devuelve un nvarchar en vez del varchar de las versiones anteriores.
declare @version char(2)
select @version = substring(@@version, charindex('- ', @@version) + 2, charindex('.',@@version) - charindex('- ', @@version)-2)
SERVERPROPERTY(‘ProductVersion’)
Esta opción sólo está disponible a partir de SQL Server 2000 y devuelve un valor de tipo sqlvariant, por lo que habrá que convertirlo a varchar o nvarchar para sacar la versión principal.
declare @productversion varchar(50)
declare @version char(2)
select @productversion = CAST(SERVERPROPERTY('productversion') AS VARCHAR(50))
set @version = SUBSTRING(@productversion,1,CHARINDEX('.',@productversion)-1)
xp_msver ‘ProductVersion’
http://technet.microsoft.com/es-es/library/ms187372.aspx
Quizás sea el método más complicado porque devuleve un conjunto de resultados con la siguiente forma:
Index Name Internal_Value Character_Value
------ -------------------------------- -------------- ----------------------
2 ProductVersion 589824 9.00.1406.00
(1 filas afectadas)
Pero también se puede obtener la versión con algo como esto:
CREATE TABLE #VersionTable(
[Index] int,
Name varchar(30),
Internal_Value int,
Character_Value varchar(50))
GO
INSERT INTO #VersionTable
EXEC master..xp_msver 'ProductVersion'
DECLARE @Version char(2)
SELECT @Version = (
SELECT SUBSTRING(Character_Value,1,CHARINDEX('.', Character_Value)-1)
FROM #VersionTable)
drop table #VersionTable
Con cualquiera de las 3 opciones obtendremos lo siguiente en la variable @Version:
‘7’ -> SQL Server 7
‘8’ -> SQL Server 2000 y MSDE
‘9’ -> SQL Server 2005
‘10’ -> SQL Server 2008
Happy coding ;)