miércoles, 31 de octubre de 2007

Fechas... Soluciones...

Supongan que tienen que desarrollar algo en una base que esta configurada con un lenguage diferente al te la PC de desarrollo, uno de los campos con mas tipicas fallas es el datetime. Para esto podemos cambiar en la sesion el lenguaje para poder trabajar con las fechas de manera transparente sinn tener que convertir las mismas. A mi me resulto util.

CREATE TABLE [dbo].[test](
[id] [int] IDENTITY(1,1) NOT NULL,
[fecha] [datetime] NOT NULL
) ON [PRIMARY]

SET LANGUAGE us_english
insert into test values ('30/12/2007')
ERROR

SET LANGUAGE spanish
insert into test values ('30/12/2007')

SET LANGUAGE us_english
insert into test values ('12/30/2007')


SET LANGUAGE spanish
insert into test values ('12/30/2007')
ERROR

Prueben

Cabecera Detalle

Les dejo el link a 2 articulos de mi autoria.


http://www.elguille.info/colabora/NET2006/sebaconte_UtilizacionCabeceraDetalle.htm

http://www.elguille.info/colabora/NET2006/sebaconte_xml_cabecera_detalle_ejemplo.htm

Pivot en SQL 2005

Aca un ejemplo de la sentencia PIVOT.


CREATE TABLE [dbo].[Productos](
[IdProducto] [int] NULL,
[Descripcion] [nvarchar](255) NULL,
[IdRubro] [int] NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Rubros](
[idRubro] [int] NULL,
[Descripcion] [nvarchar](255) NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Vendedores](
[IDVendedor] [int] NULL,
[Descripcion] [nvarchar](255) NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Ventas](
[IdVendedor] [int] NULL,
[IdProducto] [int] NULL,
[Cantidad] [int] NULL,
[Fecha] [datetime] NULL
) ON [PRIMARY]


Insert into Rubros (idRubro,Descripcion) values (1 ,'Perfumes')
Insert into Rubros (idRubro,Descripcion) values (2 ,'Desodorantes')
Insert into Rubros (idRubro,Descripcion) values (3 ,'Cremas')

Insert into Vendedores (idVendedor,Descripcion) values (1 ,'Juan Perez')
Insert into Vendedores (idVendedor,Descripcion) values (2 ,'Maria Vazquez')
Insert into Vendedores (idVendedor,Descripcion) values (3 ,'Rocio Marquez')

Insert into Productos (idProducto,Descripcion,IdRubro) values (1 ,'Perfume Hombre',1 )
Insert into Productos (idProducto,Descripcion,IdRubro) values (2 ,'Perfume Mujer',1 )
Insert into Productos (idProducto,Descripcion,IdRubro) values (3 ,'Desodorante Hombre',2 )
Insert into Productos (idProducto,Descripcion,IdRubro) values (4 ,'Desodorante Mujer',2 )
Insert into Productos (idProducto,Descripcion,IdRubro) values (5 ,'Crema manos',3 )
Insert into Productos (idProducto,Descripcion,IdRubro) values (6 ,'Crema Cuerpo',3 )

Insert into Ventas (idVendedor,IdProducto,Cantidad,Fecha) values (1 ,1 ,10 ,'01/10/2005')
Insert into Ventas (idVendedor,IdProducto,Cantidad,Fecha) values (2 ,2 ,5 ,'01/10/2005')
Insert into Ventas (idVendedor,IdProducto,Cantidad,Fecha) values (1 ,4 ,20 ,'01/10/2005')
Insert into Ventas (idVendedor,IdProducto,Cantidad,Fecha) values (2 ,5 ,30 ,'01/10/2005')
Insert into Ventas (idVendedor,IdProducto,Cantidad,Fecha) values (3 ,6 ,50 ,'01/10/2005')
Insert into Ventas (idVendedor,IdProducto,Cantidad,Fecha) values (3 ,4 ,100,'01/10/2005')



SELECT Vendedor,isnull([Perfumes],0) as Cremas ,isnull([Desodorantes],0) as Desodorantes,
isnull([Cremas],0) as Perfumes
/*Select que define como se mostraran los tados y por que columna se agrupara (Vendedor)*/

FROM
(
Select
cast(vnd.descripcion as char(20)) Vendedor, Cantidad , cast(rbr.descripcion as char(20))Rubro
From
ventas vts inner join vendedores vnd
on vts.idvendedor=vnd.idvendedor
inner join Productos Prd
on Prd.idproducto=vts.idProducto
Inner join Rubros Rbr on Rbr.idRubro=Prd.idRubro

) po

/*Origen de los Datos*/


PIVOT
(
SUM(cantidad)
FOR Rubro IN
([Cremas] , [Perfumes] , [DEsodorantes])
) AS PVT

martes, 30 de octubre de 2007

Que es mas Rapido?

Hola les dejo esta inquietud, que piensan que es mas rapido?

1) Select * from table where texto="texto"
2) Select * from table where upper(texto)="TEXTO"
3) Select * from table where texto="texto" or texto="TEXTO"

1) Cuando el conjunto de caracteres es Case insensitive, es lo mas performante.
2) Si el conjunto de caracteres es Case Sensitive y el texto tiene mayusculas y minusculas intercaladas
3) Si el campo texto tiene MAYUSCULAS o minusculas pero no intercaladas (es mas rapido esto que un upper())

miércoles, 24 de octubre de 2007

Presentacion

Hola, en este lugar voy a tratar temas del dia a dia y volcar tanto experiencias como situaciones que merezcan ser difundidas, para esto lo voy a organizar en temas:
Optimizacion de Performance
Resolucion de consultas
XML
Diseño de Base de Datos
Y lo que vaya surgiendo.