viernes, 27 de marzo de 2009

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’)


http://msdn.microsoft.com/es-es/library/ms174396.aspx

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 ;)

martes, 10 de marzo de 2009

Truco rápido: todos los mensajes de error de SQL Server a mano

Cuando trabajas con SQL Server estás acostumbrado a que los mensajes de error que aparecen en el fichero ERRORLOG o en el visor de sucesos sean bastante crípticos y lo normal es acabar tirando de [ponga aquí su buscador favorito] para saber de qué se trata.

Pues bien, hace tiempo que descubrí ,dentro de la enormidad que son los libros en pantalla de SQL Server, una página con los códigos de error organizados por número, y desde entonces es mi primera opción a la hora de buscar, así que aquí la tenéis:

http://technet.microsoft.com/es-es/library/cc645603.aspx (en castellano)

http://technet.microsoft.com/en-us/library/cc645603.aspx (en inglés)


Espero que os sirva de ayuda ;)

martes, 3 de marzo de 2009

Libro gratuito: Introducing Microsoft SQL Server 2008

Dicen que nadie da duros a 4 pesetas, pero a veces l@s chic@s de Redmond tienen iniciativas como esta y ponen a disposición de tod@s libros de Microsoft Press en formato digital de manera gratuita.

Esta vez le toca a: Introducing Microsoft SQL Server 2008, un libro con más de 200 páginas sobre la nueva versión de SQL Server.

Es necesario registrarse, pero todos tenemos una cuenta para estos menesteres, ¿no? :P