# SQL Server Compact

Microsoft SQL Server Compact (SQL Server CE) es un motor de base de datos relacional, de libre descarga y distribución, tanto para dispositivos móviles como para aplicaciones escritorio. Especialmente orientada a sistemas ocasionalmente conectados, ofrece unas características especialmente útiles para clientes ligeros. La versión más reciente es SQL Server Compact 3.5 SP2. Anteriormente era conocida como SQL Server CE o SQL Server Mobile. Desde la versión 2.0, el lanzamiento de SQL Server Compact ha ido ligado al de Microsoft Visual Studio .NET.
Recientemente, Scott Guthrie, vicepresidente Corporativo de la División de Desarrollo de Microsoft, anunció el próximo lanzamiento de SQL Server Compact 4.0 con novedades relacionadas principalmente al desarrollo de aplicaciones ASP.NET. Por otra parte la próxima versión de Windows Phone 7.1, con nombre en clave Mango, soportará una versión específica de SQL Server Compact 4.0 con soporte para LINQ to SQL.

## Historia

Fue presentada por Microsoft en el año 2001 como SQL Server CE 1.0 para ofrecer almacenamiento relacional y sincronización de aplicaciones móviles Pocket PC 2002 desarrolladas con Embeded Visual Basic y Embedded Visual C++ con sistemas SQL Server 2000. Junto con la aparición de Microsoft Visual Studio .NET 2003 y con ello .NET Compact Framework 1.1 se presentó SQL Server CE 2.0 y System.Data.SqlServerCe.dll como interfaz de desarrollo para aplicaciones .NET Compact Framework junto a la interfaz de desarrollo para aplicaciones nativas.
En noviembre de 2006, junto al lanzamiento oficial de Visual Studio 2005 y SQL Server 2005, Microsoft lanza la versión 3.0 renombrada a SQL Server Mobile 3.0. Tras esta versión aparecen nuevas características y funcionalidades como el acceso simultáneo, soporte transaccional o la integración con Microsoft Visual Studio y SQL Server Management Studio. Hasta la fecha, SQL Server CE no ofrecía ningún tipo de herramientas de administración más que la Query Analyzer para Windows Mobile. Meses más tarde se anuncia una nueva versión bajo el nombre en clave SQL Server Everywhere la cual ofrecía soporte multiplataforma para sistemas operativos basados en Windows CE y Windows 32/64 bits. Dicha edición fue lanzada oficialmente bajo el nombre SQL Server Compact 3.1.
SQL Server Compact 3.5 SP1 fue presentada junto a Visual Studio 2008.NET SP1.
SQL Server Compact 3.5 SP2 fue presentada junto a Visual Studio 2010.

## Características

Una base de datos SQL Server Compact, a diferencia de una base de datos SQL Server que se expone como un servicio de Windows, se ejecuta bajo el proceso de la aplicación que la consume (in-process). El tamaño máximo del archivo de base de datos es de 4 Gb. y la extensión por defecto es .sdf la cual puede ser modificada. El nombre de la base de datos está limitado a 128 caracteres. En cuanto a limitaciones destacar que el número máximo de tablas por base de datos es de 1024 con un tamaño máximo por registro de 8060 bytes con un tamaño por página de 4 Kb. y 2 Gb. para campos BLOB.
SQL Server Compact posee un motor de base de datos así como un procesador y un optimizador de consultas especialmente diseñado para entornos móviles. Soporta un subconjunto de tipos de datos y de sentencias T-SQL de SQL Server y entre las últimas novedades de la versión 3.5 se encuentran:
* Consultas jerarquizadas con SELECT FROM
* Instrucciones CROSS APPLY y OUTER APPLY
* Instrucción CAST y DECIMAL
* SET IDENTITY INSERT
* Instrucción TOP
Respecto a los tipos de datos de texto, SQL Server Compact únicamente soporta tipos de datos de cadena compatibles con Unicode (nchar, nvarchar, ntext).
A nivel de seguridad SQL Server Compact 3.5 ofrece la posibilidad de cifrado del fichero de base de datos con una contraseña de acceso restringida a un máximo de 40 carácters ofreciendo tres tipos de modos de cifrado:
* Platform Default (Por defecto)
* Engine Default
* PPC2003 Compatibility
Existe una única base de datos temporal por sistema la cual es imprescindible para llevar a cabo, por ejemplo, operaciones ORDER BY. Su creación es implícita si no se especifica lo contrario en la cadena de conexión.
En entornos de ejecución bajo plataforma Windows 32/64 bits, SQL Server Compact soporta transacciones ligeras a través de contextos transaccionales administrados por LTM (Lightweight Transaction Manager) expuestos desde la versión .NET Framework 2.0 a través del espacio de nombres System.Transaction. Para plataformas Windows CE podemos hacer uso de las sentencias BEGIN, COMMIT y ROLLBACK TRANSACTION de T-SQL así como a través del objeto SqlCeTransaction expuesto en el espacio de nombres System.Data.SqlServerCe.
En cuanto a herramientas de creación, diseño y administración, SQL Server Compact se integra desde la versión 3.0, con Microsoft Visual Studio (incluyendo la edición Express desde la versión 3.5) y SQL Server Management Studio. Desde esta última permite consultar los planes de ejecución del optimizador de consultas antes y durante la ejecución de una sentencia T-SQL válida.

## Desarrollo

SQL Server Compact puede ser consumida tanto por aplicaciones .NET Framework y .NET Compact Framework como por aplicaciones nativas. El conjunto de clases que proporciona es muy extenso y abarca desde la creación de la base de datos y mantenimiento hasta la manipulación de datos.

## Entornos de sincronización

SQL Server Compact puede ser sincronizado con bases de datos SQL Server a través de la réplica por mezcla de SQL Server y de RDA (Remote Data Access). Para la sincronización con otros orígenes de datos distintos a SQL Server se hace uso de los Servicios de Sincronización para ADO.NET (Sync Services for ADO.NET).

## Bibliografía

Libros en español sobre Microsoft SQL Server Compact:
* Torres, José Miguel, Microsoft SQL Server Compact 2008 SP1: Referencia Completa. Ed. Krasis Press, 2008.