JASoft.org

El blog de José Manuel Alarcón Aguín. Programación web y mucho más...

MENÚ - JASoft: JM Alarcón

Resolver error al conectarse a SQL Server debido al certificado SSL

La situación es la siguiente: vas a conectarte a SQL Server desde un equipo remoto usando exactamente las mismas credenciales que usabas para conectarte en local y, al hacerlo, recibes un error como este, que dice básicamente que aunque se puede conectar, no lo hará porque no puede confiar en la autoridad que ha emitido el certificado... ¿Cómo podemos solucioanr este error? [Más]

TRUCO: Acceder a SQL Server Configuration Manager en Windows 8

Esto es algo muy tonto, pero que te puede llegar a frustrar… Si quieres modificar las configuraciones de SQL Server, acceder a las propiedades de las instancias y los servicios, la configuración de red, etc… necesitas acceder al Configuration manager: En Windows 7 y versiones anteriores es muy sencillo acceder a esta herramienta ya que tiene un icono muy claro en el menú de inicio: Sin embargo, si tienes instalado SQL Server en Windows 8 o posterior, aunque busques en la lista completa de programas de Windows en la pantalla de inicio, no aparece por ningún lado. El motivo es que, en realidad, este programa no es un ejecutable normal y corriente, sino que es un "snap-in" o complemento "enchufable" de la consola de administración del sistema, Microsoft Management Console (MMS), y por eso no lo considera el nuevo menú de inicio. ¿Cómo podemos acceder a esta funcionalidad de manera sencilla? Bueno, una forma sería lanzar MMC.exe y agregar el complemento desde ... [Más]

TRUCO: Guardar un plan de mantenimiento fuera de SQL Server

Como es sabido, SQL Server dispone de una utilidad estupenda llamada "Planes de Mantenimiento" que nos permite, sin apenas tener ni idea, crear un montón de tareas útiles para nuestras bases de datos: desde comprobar la integridad de las base de datos o actualizar las estadísticas, hasta crear copias de seguridad con multitud de opciones. También nos permite definir con mucho nivel de detalle las tareas a realizar, con una interfaz gráfica que nos muestra el flujo de trabajo y nos permite programarlas a determinadas horas, etc… Pulsa para aumentar Se trata de algo realmente útil que nos permite obtener un gran control sobre las acciones a realizar de manera periódica, sin tener que recurrir a programarlas en T-SQL. Estos planes de mantenimiento se almacenan por defecto en el propio motor de base de datos. Si queremos guardarlos a disco para persistirlos fuera de la base de datos o para reutilizarlos en otro servidor, el SQL Server Management Studio (SSMS) no nos facil... [Más]

TRUCO: Cómo usar REPLACE en un campo NTEXT de SQL Server

Un truco rápido para hoy... Hasta SQL Server 2005 la única manera de guardar en una base de datos campos de texto muy largos, de longitud arbitraria, era utilizando un campo de tipo NTEXT. Estos campos eran útiles para estas cuestiones, pero tenían bastantes limitaciones ya que no permiten el uso de ciertas funciones (como LEN o REPLACE) y además en lugar de guardarse en línea como otros datos, se guardaban en LOBs (Large Objects) aparte, por lo que el rendimiento es mucho peor. Además, es un tipo de dato obsoleto que ya no deberías utilizar pues aunque sigue estando soportado por SQL Server 2012, en versiones posteriores podría eliminarse y ya no podrías utilizarlos. El caso es que hoy he tenido que actualizar una base de datos bastante vieja que tenía campos de tipo NTEXT, para lo cual necesitaba usar la función REPLACE y sustituir unos textos por otros dentro de estos campos. Si intentas usar REPLACE con un campo NTEXT SQL Server te devuelve un error. Para poder hacerlo igualmen... [Más]

Cómo devolver los resultados de una sub-consulta como un único campo de texto

Esta es una tarea bastante común pero que es muy complicada de conseguir con SQL Server. Imagínate que tienes la siguiente situación: Necesitas obtener un listado, en una cuadricula, con los datos básicos de cada cliente de tu base de datos, y con la fecha y el importe de cada pedido que ha realizado en el último año a continuación en la misma fila. Obtener un listado de clientes es un simple SELECT y obtener un listado de clientes con sus pedidos es un simple INNER JOIN. Lo complicado es que obtengamos para cada cliente toda la información de los pedidos como si fuera un campo más de la consulta. Cada cliente puede tener (y tendrá generalmente) un número de pedidos distinto: unos harán 1 pedido, otros 3 y otros 10, así que no podemos simplemente trasponer los resultados con PIVOT o UNPIVOT para devolverlos en columnas en lugar de en filas. Un listado de este tipo tendría un aspecto sim... [Más]

SQL Server Express: Hacer backups programados y con retención

SQL Server Express es una excelente opción para trabajar con SQL Server en proyectos pequeños y medianos sin tener que pagar licencias. Es una versión gratuita pero totalmente funcional del gestor de base de datos relacionales de Microsoft. A cambio tiene ciertas limitaciones. Por ejemplo, no permite utilizar más de 1 GB de RAM por instancia para caché de datos en memoria y el tamaño de cada base de datos gestionada no puede superar los 10 GB (que es un tamaño considerable para aplicaciones normales). Carece de otras características de alta disponibilidad y replicación, pero ofrece toda la funcionalidad habitual (incluyendo integración de datos y reporting) y las herramientas de administración. Aquí podrás encontrar una comparativa de todas las ediciones de SQL Server. Una de las cosas que no están disponibles con SQL Server es el Agente SQL. El agente nos permite programar tareas que se ejecutarán sobre las bases de datos cuando nosotros queramos. Esta carencia dificulta un poco, por... [Más]

Instancias de SQL Server: ¿qué son y para qué sirven?

Cuando instalas SQL Server se te pide que otorgues un nombre a la instancia que estás instalando. Y cuando te conectas desde una aplicación o con el SQL Server Management Studio (SSMS) también lo haces a una instancia determinada de SQL Server. Es tan común que todos lo damos por hecho, pero realmente ¿cuántos saben qué es una instancia de SQL Server y cuál es su utilidad?. Bien, en SQL Server es posible ejecutar varias copias del servidor de datos al mismo tiempo, con sus usuarios, bases de datos y demás elementos independientes unos de otros. A cada una de esas copias se le llama “instancia”. Lo que tenemos con las instancias son varios SQL Server ejecutándose en paralelo en la misma máquina. El límite es de 50 de instancias por cada máquina. Existen dos tipos de instancias: Las instancias con nombre: se accede usando una barra inclinada hacia la izquierda seguida del nombre de la instancia, que es la forma de identificarlas. Por ejemplo: (local)\Instancia, .\Instancia, localho... [Más]

SQL Server: enviar automáticamente los resultados de una consulta por email

Hoy tuve que montar un sistema sencillo para poder enviar de manera periódica, en formato CSV, una serie de datos a unos usuarios. Los datos se obtienen a partir de una consulta más o menos compleja a una base de datos SQL Server. Lo que necesitaba era que los resultados de esa consulta, una vez a la semana, se enviaran por email a un usuario para que pudiera abrirlos en una Excel y trabajar con ellos. Para conseguirlo no quería programar ni tampoco crear ningún paquete de integración específico ni hacer nada complicado. Lo único que necesitaba era definir la consulta, el formato y el destinatario. Punto. Mala suerte: en SQL Server no hay nada incluido nativamente que nos permita conseguir algo así de manera tan directa, lo cual no deja de ser una pequeña vergüenza porque realmente es algo habitual y deberían facilitarlo un poco ¿verdad? Así que tuve que improvisar y buscar una manera de conseguirlo sin complicarme demasiado la vida. A continuación os cuento el método que se me ocu... [Más]

Cómo detectar registros duplicados en una base de datos

Esta es una consulta muy sencilla pero que a muchos principiantes les resulta de mucha utilidad, así que como hoy he tenido que usarla y me he acordado, la pongo aquí por si a alguien le viene bien. El problema es el habitual: tenemos una tabla con muchos registros y queremos saber si alguno de ellos está duplicado. Lo más común no es que nos interese realmente saber qué registros están duplicados, sino qué registros tienen dos o tres campos iguales. Por ejemplo, si tenemos una lista de clientes quizá no nos interesa saber quiénes están duplicados buscándolos por el nombre (ya que éste puede haber sido escrito diferente: con o sin tilde, con abreviatura o no), por lo que resultaría más interesante averiguar aquellos registros que tienen el teléfono y el email duplicados por ejemplo. La consulta es muy fácil, y usa una función de agrupamiento para determinarlo. La consulta genérica sería esta: 1: SELECT COUNT(*), CAMPO_A, CAMPO_B 2: FROM T... [Más]

Consulta para sacar información de campos en SQL Server

Hoy un truco rápido. Imagínate que tienes dos bases de datos aparentemente idénticas en dos servidores SQL Server. Quizá una es la de producción y la otra es de desarrollo. Las BBDD deberían ser iguales pero no te fías de que sea así por el motivo que sea, y necesitas comprobar de manera rápida si, al menos, tienen las mismas tablas y número de campos. Si no tienes una herramienta mejor a mano con el propio SQL Server puedes conseguirlo fácilmente usando la información contenida en la tabla de sistema Information_Schema que, como su propio nombre indica, contiene información sobre el esquema de la base de datos, y por lo tanto nos permite consultar cualquier dato sobre la estructura y definición de los datos. En el enlace anterior está toda la información, pero vamos a ver un par de consultas sencillas pero útiles, por ejemplo para el caso planteado antes. Información sobre las tablas de la BD SELECT * FROM Information_Schema.Tables Número de campos por tabla Esta consulta es ... [Más]