SQL Server 08 – Katmai : What’s new for devs?

SQL Server 2008 

Como saben existe un CTP de Noviembre de Katmai, que pueden descargar de este vínculo. SQL Server 2008 esta lleno de cosas nuevas y específicamente para desarrolladores van a encontrar una serie de características muy interesantes que les facilitarán la vida y les ayudarán a desarrollar aplicaciones más robustas:

SELECTINSERTUPDATE? -> MERGE

Aquí está el escenario: quieres insertar un registro en una tabla, pero si este registro ya existe entonces solamente lo actualizas… ahí tienes que hacer primero un select buscando el registro verificando si existe… si este existe entonces haces un update sobre dicho registro y si no, haces un insert. Tambien permite delete, no se saquen de onda.

Con el enunciado nuevo MERGE que entra dentro de T-SQL y es compatible con el comando ISO-2003 y nos facilita la inserción y actualización de estos. Chequen este ejemplo:

MERGE SalesArchive AS SA
USING (
SELECT
CustomerID,
LoadDate = MIN(CONVERT(VARCHAR(8), GETDATE(), 112)),
TotalSalesAmount = SUM(SaleAmount),
TotalSalesCount = COUNT(*)
FROM SalesFeed
GROUP BY CustomerID
) AS SalesFeedCTE (CustomerID, LoadDate, TotalSalesAmount, TotalSalesCount)
ON
(
SA.CustomerID = SalesFeedCTE.CustomerID AND SA.SalesDate = SalesFeedCTE.LoadDate
)
WHEN NOT MATCHED THEN
INSERT (CustomerID, SalesDate, TotalSalesAmount, TotalSalesCount, CreationDate, UpdatedDate)
VALUES( SalesFeedCTE.CustomerID, SalesFeedCTE.LoadDate, SalesFeedCTE.TotalSalesAmount, SalesFeedCTE.TotalSalesCount, GETDATE(), GETDATE())
WHEN MATCHED THEN
UPDATE
SET SA.TotalSalesAmount = SA.TotalSalesAmount + SalesFeedCTE.TotalSalesAmount,
SA.TotalSalesCount = SA.TotalSalesCount + SalesFeedCTE.TotalSalesCount,
SA.UpdatedDate = GETDATE();

Lo que sucede es que hace una busqueda por un cliente y si no encuentra el cliente (WHEN NOT MATCHED) entonces hace una inserción y si lo encuentra hace una actualización (WHEN MATCHED). Como ve

Muy interesante y pueden encontrar el ejemplo completo en este blog, con un tutorial más detallado de como funciona.

NUEVOS TIPOS DE DATOS: DATE, TIME DATETIME2

Cuando guardamos información de en los tipos de dato de fecha, guardaba la fecha completa y la hora completa… es decir si guardabas por ejemplo 19-08-1976, SQL Server internamente guarda la hora como 00:00:00.000 y lo mismo pasaba para la fecha que guardaba 1900-01-01. Esto era medio confuso por que al final del día, estabas guardado un dato compuesto por fecha y hora.

En SQL Server 2008 ya existen los tipos de datos date y time que solo guardan los valores discretos específicos para cada dominio. Tambien existe el datetime2 que es exactamente igual al datetime que ya conocemos solo que es mas preciso; hasta 100 nano-segundos (7 espacios decimales).

DECLARE @Dt as datetime2(4) set @Dt = getdate()
select @Dt

Para más información revisen este vínculo que está muy interesante y explica más a detalle sobre los nuevos tipos de datos.

JERARQUÍAS

Este es nuevo dentro de SQL Server 2008 y es muy interesante. Todos sabemos que existen las jerarquías (aunque algunos crean que hay masas amorfas para trabajar y hay conjuntos de habilitadores… eso es una falacia). Existen en la vida jerarquías y estas nos facilitan el trabajo con los datos… de esta manera se introduce un nuevo tipo de dato que es el hierarchyId.

Este es un tipo de dato interesante que permite a los desarrolladores representar la posición de una entidad en una jerarquía; como una estructura de reportes u organigrama. Gracias a los CTE (Common Table BLOCKED EXPRESSION podríamos hacer consultas recursivas (típicamente necesarias para resolver jerarquías) que nos permitan hacer la resolución de jerarquías más rápido y fácil.

Lo que está interesante acerca de este tipo de dato, es que un tipo de dato intrínseco del CLR — significando que MS esta permitiendo apalancar la funcionalidad del CLR nativas dentro de SQL Server 2008. Muy interesante.

GIMME MY INTELLISENSE

Pues si, ya tenemos IntelliSense tambien dentro de SQL Server 2008, dándonos todos los nombres de las columnas de una tabla, el tipo de dato, tooltips y todo eso. Aunque no es perfecto; es un gran avance para algunos desarrolladores y DBAs.

PARAMETROS DE VALOR DE TABLA

Los parámetros de valor de tabla (Table-Valued Parameters) con una manera de pasar una serie de valores a un procedimiento almacenado. Alguna vez tuvimos que "deshidratar" algunos datos en XML, almacenarlos en un archivo y posteriormente "hidratarlo" en la llegada … bueno, pues un TVP te permite hacer eso nativamente de una manera muy, pero muy sencilla.

CREATE TYPE myTable AS TABLE (
   key varchar(6),
   value varchar(20)
)
GO

CREATE PROC dbo.InsertKeyValuesFromWebApp
       @tvp myTable READONLY,
       @owner int
AS
       SET NOCOUNT ON

       INSERT INTO [dbo].[SomeTable] (key, value, owner)
       SELECT key, value, @owner FROM @tvp

       RETURN 0
GO

En el anterior ejemplo podemos ver como estoy creando un tipo de tipo tabla (valgase la redundancia) el cual almacena una serie de valores. Dentro del procedimiento almacenado tengo un select dentro del insert que obtiene todos los valores de dicho valor. Bastante práctico. Para más información échale un ojo a este vínculo.

Bueno, este post ya parece más un tratado así que ya le dejamos por aquí … pero como vemos está muy interesante lo que viene y las nuevas características que nos facilitaran la vida a los desarrolladores.

Cheers! Beer


Comentarios

Deja una respuesta