lunes, 30 de noviembre de 2009

SQL Server: ntext

Tipos de Datos

ntext

Datos Unicode de longitud variable con una longitud máxima de 2^30 - 1 (1.073.741.823) caracteres. El tamaño del almacenamiento, en bytes, es dos veces el número de caracteres especificado. El sinónimo de ISO para ntext es national text.

text

Datos no Unicode de longitud variable de la página de códigos del servidor y con una longitud máxima de 2^31-1 (2.147.483.647) caracteres. Cuando la página de códigos del servidor utiliza caracteres de doble byte, el almacenamiento sigue siendo de 2.147.483.647 bytes. Dependiendo de la cadena de caracteres, el espacio de almacenamiento puede ser inferior a 2.147.483.647 bytes.

Los tipos de datos ntext, text e image se quitarán en una versión futura de SQL Server.

Microsoft sugiere evitar su uso en nuevos trabajos de desarrollo.

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


Me encontré con unos de estos datos en una migración y no podía hacer comparaciones del tipo <> por no ser compatible con el tipo de dato ntext (en este caso el campo nm_observacion):


select rtrim(ltrim(nm_observacion))
,fc_recepcion
from db_SNP_RNASQL.dbo.cc_recepcion
where rtrim(ltrim(nm_observacion)) is not null
and rtrim(ltrim(nm_observacion)) <> ''

Tampoco podía calcular el largo de los datos para ver su tamaño y cambiar a un varchar con tranquilidad

No servía el len():

select max(len(nm_observacion))
from db_SNP_RNASQL.dbo.cc_recepcion

por lo que fue necesario ocupar la función DATALENGTH():

select max(DATALENGTH(nm_observacion))
from db_SNP_RNASQL.dbo.cc_recepcion

Fuente: http://www.mssqltips.com/tip.asp?tip=1188

viernes, 27 de noviembre de 2009

El DECODE en SQL Server

En Oracle existe la funcion DECODE que permite evaluar un valor para seleccionar otro.

select decode(v_mes, 1, 'Enero', 2, 'Febrero', 'Otro')
into v_valor
from dual


En SQL Server, el simil se hace con un CASE, asi:


select @v_valor = case @v_mes
when 1 then 'Enero'
when 2 then 'Febrero'
else 'Otro'
end;

jueves, 26 de noviembre de 2009

Cambio de nombres de tablas y columnas en SQL Server

Para hacer un cambio de nombre de tabla en SQL Server hay que hacerlo con el sgte. script:

sp_rename 'nombreAntiguoDeLaTabla', 'nombreNuevoDeLaTabla'


Para hacer un cambio de nombre de campo en SQL Server hay que hacerlo con el sgte. script:

sp_rename 'nombreDeLaTabla.nombreAntiguoDelCampo', 'nombreNuevoDelCampo','COLUMN'

viernes, 20 de noviembre de 2009

Problemas de idiomas en SQL Server

Haciendo una migración en bases de datos MS SQL Server me encontré con que una de las tablas tenía la definición de un campo en un idioma diferente por lo que al hacer la sgte. consulta:

select c1.idciudad, c2.cd_comuna
from db_SNP_RNASQL.dbo.__comuna c1
,db_SNP_RNASQL.dbo.tb_comuna c2
where c1.comuna = c2.nm_comuna
order by 2

me arrojaba el sgte. error:

No se puede resolver el conflicto de intercalación entre "Modern_Spanish_CI_AS" y "Traditional_Spanish_CI_AS" de la operación equal to.

La solución fue aplicar una especie de traductor de estas columnas quedando la consulta así:

select c1.idciudad, c2.cd_comuna
from db_SNP_RNASQL.dbo.__comuna c1
,db_SNP_RNASQL.dbo.tb_comuna c2
where c1.comuna COLLATE Modern_Spanish_CI_AS =
c2.nm_comuna COLLATE Modern_Spanish_CI_AS

order by 2

La fuente de este conocimiento en capitalfederal.com

miércoles, 18 de noviembre de 2009

Identity

En una migración de MS SQL Server me encontré con algunas tablas que tienen PK con un identity por lo que es necesario bloquear esta propiedad antes de hacer un insert masivo con PK definidos con anterioridad. Para ello es necesario ejecutar el script con las siguientes instrucciones:


--saca identity de la tabla
set identity_insert sifaComuna on

insert into sifaComuna
(idComuna
,idRegion
,nombreComuna)
select cd_comuna
,cd_region
,nm_comuna
from db_SNP_RNASQL.dbo.tb_comuna

--vuelve a poner identity en la tabla
set identity_insert sifaComuna off
Posterior a este insert masivo, el campo con identity quedará seteado para ser insertado con el valor que viene a continuación de acuerdo con el mayor valor ingresado y el incremento definido para el identity.

perdí la URL desde donde saqué esto.

miércoles, 4 de noviembre de 2009

Los goles del Chupete

Los goles de Humberto Suazo en las eliminatorias del mundial de Sudáfrica 2010