Entradas

Mostrando las entradas etiquetadas como SQL Server

SQL Server, columnas calculadas

Aquí os dejo algunos apuntes básicos sobre las columnas calculadas en SQL Server. ¿Cuando se calculan? Depende de cómo defina la columna calculada. Una columna calculada PERSISTIDA se calculará y luego se almacenará como datos dentro de la tabla al ser creada. Si no define la columna como PERSISTIDA, se calculará cada vez que se ejecute una consulta que la incluya. Mas info aquí . Tablas temporales o versionadas La modificación del esquema de una tabla versionada por el sistema (tablas temporales) falla porque no se admite agregar una columna calculada mientras el versionado del sistema está activado. Para solucionarlo: Primero desactivar el versionado Luego agregar la columna calculada a la tabla base Verificar el tipo de la columna calculada resultante Agregar la columna con el tipo estático apropiado a la tabla de historial (tabla temporal o tabla versionada) Volver a activar el versionado Otra cosa a tener en cuenta es que una columna calculada que utiliza una...

SQL Server schemabinding

Este post es una traducción al castellano de este otro . Cuando se utiliza la palabra clave SchemaBinding al crear una vista o función, lo que hace es vincular la estructura a las tablas o vistas subyacentes. ¿Qué significa? Significa que mientras un objeto exista como un objeto vinculado, está limitado en los cambios que se pueden realizar sobre él por las tablas o vistas que lo referencian. Si una tabla es referenciada por una función o vista vinculada, solo las columnas a las que hace referencia la función o la vista no se pueden modificar , el resto si. Cuando tienes objetos vinculados en una base de datos: No puedes cambiar la intercalación (collation) de la base de datos.  No puedes usar SELECT * en las vistas vinculadas.  No puedes ejecutar sp_refreshview en las vistas vinculadas.  Puedes realizar cualquier cambio en la tabla origen que no afecte la estructura de las columnas enlazadas. Puedes averiguar si un objeto está vinculado al esquema mirando ...

Microsoft ODBC 17 + SQL server driver 5.2.0 RC1 previews

Imagen
Microsoft está apostando fuerte con SQL Server en Linux, aún le falta un IDE potente como SSMS pero el servidor y la conectividad con lenguajes como PHP está servida, ya no es necesario tener que compilar de cero PHP para tener paquetes que no están en producción, sobre todo de Microsoft, todo gracias a la ayuda del rempositorio de Remi y las contibuciones en github de la propia Microsoft. Con esta base previa, hoy, me centraré en instalar el nuevo driver ODBC con soporte para Always Encripted, el driver de PHP 5.2 y todo con la última versión en el mercado de PHP, la 7.2. Los pasos a seguir son estos: sudo yum -y install epel-release wget yum-utils sudo wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm sudo rpm -Uvh remi-release-7*.rpm sudo yum-config-manager --enable remi-php72 sudo yum install -y unixODBC-devel autoconf sudo curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo Ahora necesitamos instalar ...

Recomendaciones para SQL Server con Dynamics NAV

Max Server Memory MAX_SERVER_MEMORY = TOTAL_SERVER_MEMORY - [OS/Apps Memory] - [Threads * Thread Size] TOTAL_SERVER_MEMORY = 24GB OS/Apps Memory = 4 GB (systems with > 16GB of RAM) Threads = 576 Thread Size = 2MB (x64) Recomendado MAX_SERVER_MEMORY = 18 GB Auto - Create Statistics Se recomienda fuertemente activar "Auto Create Statistics" ya que es una de las formas que utiliza el propio SQL Server para mejorar el rendimiento. El coste para ejecutar esta opción es mínimo en comparación con el problema de rendimiento que puede experimentar si una estadística necesaria falta y SQL Server no la puede crear. Las estadísticas son un factor muy importante en el plan de consultas eficientes que viene con SQL Server. Auto - Update Statistics Se recomienda fuertemente activar "Auto Update Statistics" ya que es una de las formas que utiliza el propio SQL Server para mejorar el rendimiento. El coste para ejecutar esta opción es mínimo en comparación ...

Actualizando columnas identity en SQL Server

Imagen
Aclaremos algunos conceptos primero, la propiedad identity puede ser utilizada para generar automáticamente valores clave en una columna, con esto quiere decir que una columna identity no tiene que ser necesariamente una clave primaria, y una clave primaria no tiene que llevar necesariamente la propiedad identity. Una columna identity no puede ser modificada ( Cannot update identity column ), la opción identity_insert sólo permite insertar valores en este tipo de columnas, pero nunca actualizarlos. ¿cómo actualizarlos entonces? Pongámonos en el peor de los casos, una clave primaria de tipo identity a la que hacen referencia foreign keys de otras tablas, si necesitásemos actualizar los valores deberíamos seguir el siguiente procedimiento: identificar todas las foreign keys que apuntan a la columna identity que deseamos modificar (esto lo podemos hacer con el SSMS escribiendo el nombre de la tabla, seleccionándolo y pulsando Alt + F1, o lo que es lo mismo ejecu...

Actualizar clave primaria autoincrement en SQL Server

Imagen
Por defecto SQL Server no deja modificar los índices autoincrement, ni siquiera poniendo la sintaxis: SET IDENTITY_INSERT TuTabla ON GO Para poder actualizar los valores de estos índices hay miles de tutoriales, pero a mi modo de ver todos demasiado complejos u obsoletos, con SQL Server 2016 lo he podido hacer siguiendo los pasos que voy a describir en este post. Lo primero es actualizar todas las claves foráneas para que al actualizar el valor del índice este se actualice en cascada, esto se puede hacer desde el SSMS sin mayor problema. Luego eliminare de la clave primaria el autoincrement de la siguiente forma: Una vez realizado este cambio puedes modificar los valores de los índices en esa columna. Ojo, no es necesario eliminar la clave primaria ni crear columnas adicionales como dicen otros manuales. Tampoco es necesario que en la consulta ejecutes el comando SET IDENTITY_INSERT TuTabla ON antes. Nada de esto es necesario con este procedimiento. ...

Presupuestos participativos Madrid

Imagen
El pasado 25 de marzo el Ayuntamiento de Madrid cerró el plazo para apoyar las propuestas de la ciudadanía destinadas a los presupuestos de 2018, 100 millones de euros para que los madrileños inviertan en su ciudad. La pregunta que os haréis es ¿esto que pinta en un blog geek? Mucho, porque gracias a PHP, SQL Server, Power BI y Excel podemos dar respuesta a algunas preguntas que no quedan del todo claras, o son inexistentes, en la web del ayuntamiento .  Preguntas como ¿número de propuestas por distrito? ¿presupuesto por distrito? ¿qué han apoyado los madrileños? Todas ellas tienen respuesta en este post. ¿Cómo he llegado a estas cifras? Primero era necesario importar en una base de datos los detalles de cada propuesta: título, apoyos, distrito y etiquetas. Estas últimas, las etiquetas, al ser creadas por los usuarios era necesario normalizarlas, de manera que de 341, eliminando duplicadas, faltas de ortografía, combinadas y agrupando, he dejado solo 169. De esta form...

Una semana con Docker en Windows

Imagen
Docker para Windows ha mejorado muchísimo, recuerdo que no hace tanto intenté probarlo y no pude porque utilizaba Virtual Box y yo ya tenía Hyper-V corriendo en mi máquina lo cual me hizo imposible la prueba. Ahora, por suerte, utiliza nativamente Hyper-V y además soporta los contenedores de Windows. Pero empecemos de cero. ¿Qué es un contenedor? Hay mil definiciones online pero en resumidas cuentas un contenedor es una especie de máquina virtual con muchas limitaciones pero grandes ventajas. Los contenedores se basan en imágenes de software que parten de una imagen base y sobre la cual heredan sus características, al principio estas imágenes base solo estaban basadas en el núcleo de Linux pero con la llegada de los Server Core y Nano Core Microsoft también ha optado por crear sus imágenes base a partir de estas dos mini distribuciones de su sistema operativo. En resumen, son un entorno operativo aislado, con controlados recursos y portátil. ¿Qué es Docker? Docker no ...

Azure SQL Database DTU Calculator en español

Imagen
Si has llegado a esta entrada es porque tienes una base de datos SQL Server que quieres (o piensas) migrar a Azure SQL Database y deseas saber cuales de los planes tendrías que elegir para ello, y sobre todo, cuanto tendrías que invertir. Si es así estas en el sitio correcto. Azure dispone de 3 planes de alojamiento: Azure SQL Database, Elastic Database y Azure SQL Data Warehouse ; en esta entrada me centraré en los dos primeros.  Cuando migras a la nube de Microsoft desde tu plataforma local (on premise) debes olvidarte de cores y RAM, lo importante son las unidades de rendimiento de base de datos o en sus siglas en inglés DTU, una equivalencia aproximada sería: 1 DTU = 1 transacción por segundo. ¿Cómo calcular cuántas DTU necesita mi base de datos?  Muy sencillo, existe una herramienta para ello llamada  Azure SQL Database DTU Calculator  donde te descargas un script PowerShell que monitorizará durante una hora tu consumo de CPU, las lecturas ...

Servidores web para Windows

Imagen
Llevo ya muchos años trabajando con servidores web, de ellos bastante tiempo sobre Windows y es bastante complicado. Llegar a una configuración óptima en Windows solo puede ser con prueba y error, no hay una receta mágica que te lo permita, pero no por ello son malos servidores, en mi opinión creo que se han dejado de lado. Windows representa sólo el 32,2 % en los sistemas operativos que mantienen servidores web. ¿Por qué tan poca cuota? Para montar un servidor web bajo Windows sólo existen 2 excusas potentes: Trabajas con ASP Tu base de datos está en Microsoft SQL Server Para el punto 1 no hay alternativa posible, ASP necesita IIS y por ello Windows. Por el contrario el punto 2 es más susceptible a cambio (y más ahora con los nuevos desarrollos en los que la propia Microsoft está involucrada como el driver ODBC y la adaptación a Linux del propio SQL Server ). Para trabajar con SQL Server no es necesario ASP, puedes acceder desde PHP con ODBC, eso si...

Microsoft ODBC driver 13 para CentOS 7

Imagen
Vamos a instalar el nuevo driver ODBC de Microsoft en un CentOS 7, pieza indispensable para futuro lanzamiento de su driver específico para Linux . Lo primero que haremos será descargar el driver ODBC desde la página oficial de Microsoft y comprobar los requerimientos mínimos para nuestro sistema operativo . yum info glibc yum info e2fsprogs yum info krb5-libs yum info openssl Para evitar errores del tipo Error: configure: error: no acceptable C compiler found in $PATH , y sobre todo en sistemas nuevos, debemos instalar un compilador para c yum groupinstall "Development tools" Instalando unixODBC Driver Manager para Microsoft ODBC Driver 13 (Preview) para SQL Server Ahora necesitamos instalar el driver manager sobre el que basa la conexión el ODBC de Microsoft. La opción más sencilla es utilizar el script de instalación que viene por defecto. Importante: la versión soportada es la que distribuye Microsoft, debéis desinstalar versiones ya existentes, da...

Alta disponibilidad con un espejo en SQL Server

SQL Server tiene varias formas para que dispongamos de alta disponibilidad en nuestras bases de datos, en este post veremos una de ellas: la creación de un espejo. Para mi la creación de un espejo vs un clúster es una preferencia personal, creo que un clúster es más complejo de mantener y gestionar, es más caro porque ambas máquinas comparten el almacenamiento y por lo menos mi experiencia con SQL Server 2008 R2 no fue muy buena y sin un soporte premiun por parte de Microsoft los fallos son difícilmente corregibles. En cambio un mirror o espejo es sencillo de configurar y pueden ser dos máquinas totalmente independientes. ¿Por qué crear un espejo en SQL Server? Porque este método permite hacer una réplica exacta de una base de datos de un servidor a otro. La gran ventaja de este método es que permite el failover automático sin intervención humana (siempre que se instale un tercer servidor witness). La desventaja del mirror es que sólo podemos tener una máquina secundaria o mirro...

El driver de SQL Server para PHP 7

Para los que utilizan SQL Server con PHP y quieran actualizar a PHP 7 por ahora no será posible, no habrá soporte oficial de Microsoft SQL Server para PHP 7 hasta enero, en una versión previa. Más información en su página de github . Por ahora la única forma de conectar con SQL Server desde PHP 7 es utilizando ODBC porque el antiguo driver mssql también ha desaparecido desde PHP 5.3, lo cual es totalmente normal teniendo soporte oficial de Microsoft. Toca esperar.

Instalando SSMS 2016 CTP2 en Windows 10

Al descargar el instalador web del nuevo SQL Server Managment Studio 2016 y ejecutarlo en mi máquina con Windows 10 build 10158, me daba el siguiente error: Error 0x800713ec: Process returned error: 0x13ec Error 0x800713ec: Failed to execute EXE package. Error 0x800713ec: Failed to configure per-machine EXE package. Applied execute package: VS2010SP1Update, result: 0x800713ec, restart: None Error 0x800713ec: Failed to execute EXE package. Este error se produce porque SQL Server 2016 requiere Visual Studio 2010. Al instalarlo hay un error ( 0x800713ec – Asia ) cuando intenta instalar el SP1. El error se produce tanto con el instalador web como con la ISO completa. Es cierto que con el instalador web las pistas no son tan claras pero gracias a la ISO pude descargarme el SP1 de Visual Studio 2010   he instalarlo sin problemas. Si solo tienes SSMS puedes descargar la ISO completa (previo registro) y actualizar los componentes, mucho mejor que con el instalador web que sospecho...

SSMS ya tiene su propia ruta de actualizaciones

SQL Server 2016 ya está en la fase 2 de beta técnica y ha sido lanzado al público con una licencia de prueba de 180 días y cargado de novedades. Una de las más importantes, y sobre la que hablaré en este post, es la nueva ruta de actualizaciones que recibe SQL Server Management Studio (SSMS). Era ya muy necesario el proceso de modernización de SQL Server Management Studio como la principal aplicación / herramienta de gestión para interactuar con la plataforma insignia de base de datos de Microsoft, se había quedado a la zaga del resto de avances en el producto. Desde el año 2005 cuando se libera SSMS como la evolución de SQL Server Enterprise Manager solamente parecía actualizarse con el fin de proporcionar todas las funcionalidades añadidas como características a SQL Server. Finalmente comienza a parecer que el equipo de ingeniería de SQL Server ha hecho caso y ha comenzado a aumentar, no sólo los recursos y el personal de desarrollo necesarios, sino también proporcionar una ma...

Consultas útiles SQL Server

Muchas veces necesitamos conocer las tablas, campos, claves, etc. de una base de datos en concreto, todos estos datos están disponibles en tablas de sistema de SQL Server, veamos algunos ejemplos. Devolver las tablas de la base de datos actual con sus claves primarias SELECT i1.TABLE_NAME, i2.COLUMN_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1 INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY' Devolver los campos de una tabla concreta que son claves foráneas y la tabla a la que hace referencia SELECT CU.COLUMN_NAME, PK.TABLE_NAME FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME WHERE FK.TABLE_NAME = ? Devo...

Freetds, PHP mssql y CentOS 6.6

Esto es una actualización de estos dos artículos de este mismo blog Acceder desde linux a SQL server con PHP y Errores de conexión con mssql connect , la diferencia es que ambos están aplicados a CentOS 6.6 y los resultados son más actuales. Requisitos Repositorio EPEL instalado, aquí os dejo un manual para hacerlo. PHP y Apache instalados y corriendo, en mi caso es PHP 5.3.3, las versiones que vienen por defecto con esta distribución de CentOS. Existen muchos artículos por internet sobre como dejar funcionando una conexión con SQL Server desde un CentOS pero casi todos pasan por compilar las librerías FreeTDS y PHP mssql, en nuestro caso lo haremos sin necesidad de compilar nada, solo utilizando esa maravillosa herramienta llamada yum, necesitamos instalar estos paquetes: yum install freetds freetds-devel php-mssql Si todo viene por defecto no debería daros ningún problema. El proceso de configuración es bastante similar al primer artículo que enlazo en este post,...

Programar un trabajo en SQL Server anualmente

El agente de SQL Server no trae por defecto (ni en la versión de 2014) la opción de crear trabajos programados que se ejecuten anualmente, para ello tenemos que recurrir a un truco que si bien es lógico no es trivial verlo. La solución para ejecutar un trabajo programado de manera anual en SQL Server es ejecutarlo un día concreto cada 12 meses. Os dejo la pantalla resaltada con las opciones que habría que señalar, en el ejemplo se ejecuta a las 00:00:01 todos los primero de enero (el primer día del año).

Trabajar con Excel en SQL Server

Muchas veces necesitamos obtener datos desde un Excel e importarlos en una tabla de nuestra base de datos o sencillamente utilizarlos con alguna consulta, si este es tu caso este tutorial te puede ayudar a trabajar con archivos Excel como si fueran una base de datos y cada una de sus hojas como una tabla. Lo primero que tienes que tener instado en el servidor donde está SQL Server (no vale en la máquina remota donde haces las consultas) es el Office o en su defecto 2007 Office System Driver Data Connectivity Components (solo 32 bits) o Microsoft Access Database Engine 2010 Redistributable (versiones de 32 y 64 bits). Es muy muy importante tener esto instalado para evitar el siguiente error The OLE DB provider "Microsoft.ACE.OLEDB.12.0" has not been registered . Más importante aún es tener la versión correcta, si tu SQL Server es de 64 bits solo puedes instalar de 64 bits, si es de 32 bits lo mismo, en caso contrario tendrías el siguiente error OLE DB provider 'Micr...

PsExec y SQL Server

Microsoft tiene un kit de recursos con varias herramientas para la línea de comandos que permiten realizar administrar sistemas remotos y locales . Este grupo de herramientas es conocido como PsTools y entre ella está Psexec , una herramienta para la línea de comandos que permite ejecutar procesos en equipos remotos. ¿Como ejecutar psexec en un trigger de SQL Server? En realidad esto es válido para cualquier aplicación local. SET @cadena='C:\ruta_completa\psexec.exe \\ip_remota\  -d "C:\ruta_archivo_bat.bat" var1±'+@var1+'~var2±'+@var2+', NO_OUTPUT' Con el comando anterior especificamos la ruta del archivo local ejecutable y la el proceso bat que queremos ejecutar en remoto, las variables 1 y 2 son opcionales en caso de que vuestro proceso bat las necesite. Con el siguiente comando ejecutamos la instrucción almacenada en la variable anterior exec master..xp_cmdshell @cadena Recordar que el usuario que ejecuta los procesos de SQL Server debe de...