Para determinar cuál es la versión exacta de un servidor SQL Server (ya sea 2000, 2005 ó 2008), basta con ejecutar la siguiente consulta:

SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY('productlevel'), SERVERPROPERTY('edition')

En mi caso, la consulta me devuelve algo como esto:

9.00.3080.00 SP2 Developer Edition

Para versiones anteriores de SQL Server, podemos utilizar esta otra consulta:

SELECT @@VERSION

Vía: Microsoft Support

Tags: , , ,

En una aplicación en la que estoy trabajando, surgió la necesidad de actualizar muchos registros de la base de datos, específicamente, lo que necesitaba era quitar un texto común dentro de un mismo campo para muchos registros.

Para ser más explícito, tenía algo como esto dentro de una tabla en la base de datos:

id filepath
1 files/archivo1
2 files/archivo2
3 files/archivo3
4 archivo4

Y necesitaba quitar el texto files/ de los registros que lo tuvieran. La magia nos la dará entonces la función REPLACE dentro de una sentencia UPDATE de SQL:

UPDATE {tabla}
SET {campo} = REPLACE({campo}, '{texto original}', '{texto de reemplazo}')
WHERE {campo} LIKE '{texto original}%'

En mi caso, la sentencia sería como sigue:

UPDATE files
SET filepath = REPLACE(filepath, 'files/', '')
WHERE filepath LIKE 'files/%'

Esto hace que primero se filtren los registros cuyo campo filepath comienza por la cadena files/ (nótese el signo de porcentaje solo al final), y luego se reemplace dicho campo por el resultado de la función REPLACE. Esta función toma el valor del campo, busca ahí la cadena files/ y la reemplaza por una cadena vacía (consiguiendo el efecto deseado).

La sentencia WHERE no es completamente necesaria, solo me aseguro que afecte a los registros donde el campo filepath comienza con ese texto y no a los que tengan el texto en otra posición.

Tags: , ,

El tipo de dato tinyint tiene una pequeña diferencia entre ambos motores de BD. Lo común es que siempre ocupa un (1) byte (28 valores posibles, osea, 256). Lo que difiere es que en MySQL se puede marcar como signed o unsigned, lo que hace que pueda o no tomar valores negativos. Cuando es signed, el rango de valores posibles va de -128 hasta 127, y en caso de unsigned, puede tomar desde 0 a 255.

En cambio, en SQL Server (por lo menos en las versiones 2005 y 2008) solo puede tomar valores positivos. Por ello, el rango que puede tomar es de 0 a 255.

Pueden ver la documentación de este tipo de dato aquí para SQL Server 2005 y aquí para MySQL.

Tags: , , , , ,

I’m using the new SQL Server 2005’s data type nvarchar(max) on a .Net project (ntext has been deprecated in this version) in conjuction with Castle ActiveRecord. For a complete integration (including schema creation), ActiveRecord property should looks like this:

[Property("description", ColumnType = "StringClob", SqlType = "nvarchar(MAX)")]

ColumnType = “StringClob” avoids text to be truncated if it gets too long. SqlType = “nvarchar(MAX)” forces the field to be created as that data type, otherwise, it will be created as nvarchar(255).

A more detailed explanation can be found here and here.

Tags: , , , , , ,

El registro de transacciones (transaction log) almacena todas las consultas que se ejecutan en una base de datos, por lo que incluso suele ser más grande que esta. Si por algún motivo queremos limpiar este registro en SQL Server 2005 (lo cual solo debería ocurrir en muy contadas situaciones, como al trabajar con una base de datos de desarrollo), se debe seguir el siguiente procedimiento (previo backup):

BACKUP LOG your_database_name
WITH TRUNCATE_ONLY

Luego de ejecutar este comando, el registro se habrá truncado pero el tamaño del archivo se mantendrá igual; por lo que para reducirlo, se deberá ir al SQL Server Management Studio, escoger la base de datos, clic derecho, Tasks > Shrink > Files. En la siguiente pantalla, escoger Log en File type, darle OK y listo.

Tags: , ,