Entradas

Mostrando las entradas etiquetadas como SQL Server

Pasar una tabla como parámetro en un stored procedure | SQL Server.

Imagen
 Para realizar está implementación debemos crear un nuevo tipo de dato en la base de datos SQL Server, para crear un nuevo tipo de dato usaremos el comando CREATE TYPE y posteriormente pasaremos este tipo como parámetro de tipo READONLY, pero para no decir más, les dejo un video con los pasos necesarios para realizar está acción. 

¿Qué hacer si quiero cambiar el tipo de una columna que se encuentra en una llave foránea o índice?

Para cambiar el tipo de dato de una columna con llave foránea e índice, debe borrar y volver a crear el índice realizando el siguiente orden:   Elimine cualquier llave foránea la cuál haga referencia a la columna a modificar. Elimine el índice de la tabla a afectar. Cambie el tipo de dato de la columna. Vuelva a crear el índice eliminado en el paso 2. Vuelva a crear las llaves foráneas que se eliminaron en el paso 1. Alternativa para estos pasos lo cuál puede envolverse en una transacción con TABLE_LOCK para que nadie pueda seguir insertando, actualizando o eliminando mientras se hace el cambio:  Cree otra tabla  y columnas con el tipo de datos correcto Crear índices, FK, etc. Inserte los datos en la tabla que se creo nueva.  Cambie el nombre de la tabla nueva con el nombre de la tabla original. Nota: Es mejor realizar la tarea anterior en la ventana de mantenimiento. Estás dos alternativas pueden ser muy utilices para realizar una migración de una tabla con múltiples datos. 

ABS (Transact-SQL)

 Es una función matemática que devuelve el valor absoluto (positivo) de una expresión numérica especifica. (ABS cambia los valores negativos a positivos). Sintaxis ABS ( numeric_expression ) Devolución Retorna el mismo el mismo valor numérico. Ejemplos: SELECT ABS ( -7.0 ), ABS ( 0.0 ), ABS ( 4.0 ); Resultados: ---- ---- ---- 7.0 .0 4.0

Diferencias Union Vs Union All

El post del día de hoy es principalmente para realizar un repaso de una duda surgida el día de hoy donde cuestionamos cual era la diferencia de Union vs Union ALL .  Primero que nada hay que resumir que a primera vista para muchos la respuesta que daríamos es que es lo mismo, y pues en realidad si sirve para lo mismo pero no lo es, empecemos diciendo que la clausula UNION nos sirve para unir dos consultas SELECT .  Para unir estas consultas debemos considerar 2 cosas importantes:  Deben cumplir con el mismo número de columnas ambas consultas. Deben cumplir con que los tipos de datos de las columnas correspondan o sean posibles de aplicar un cast al mismo tipo de dato. Y bueno con todo esto cual es la diferencia del UNION ALL pues básicamente todo esta expresado en que el UNION es la inclusión de dos consultas pero por default elimina los registros duplicados; Mientras que UNION ALL agregará los datos sin importar si estos están o no duplicados.  Ejemplo claro:  tabla select1 -->

¿Qué debo de hacer en caso de tener consultas en SQL Server que son lentas?

Imagen
El post del día de hoy está enfocado a SQL Server y se deriva de una pregunta que hizo un desarrollador el día de hoy, ¿Qué debo hacer con las consultas SQL Server lentas?, con ello a continuación menciono unos tips que podemos hacer cuando tengamos lentitud en consultas SQL Server:  Comprobar la existencia de los índices correctos.  Para esté caso es de suma importancia hacer la verificación de cuales son los índices que tiene la tabla o tablas involucradas, y debemos tomar en cuenta hacer los joins y/o especificar clausula where de acuerdo a estos índices para buscar la optimización de la misma, en caso de no tener índices hay que considerar si es necesario crearlos para mejorar el rendimiento.   Revisar la existencia de subconsultas incorrectas. Es de gran importancia revisar las subconsultas, si es que tenemos en nuestras consultas. Ya que por lo regular los subquerys tienen costos más altos, así también en ocasiones en mejor realizar múltiples consultas y guardarlas en tablas temp

¿Cómo podemos obtener el último ID generado al insertar datos en una tabla sql server?

Imagen
  En esté caso vamos a describir como obtener el último id que fue insertado a una tabla a través de SQL Server esto siempre y cuando tengamos una tabla con un índice autoincrementadle, esto muchas veces lo requerimos cuando necesitamos recuperar el id que se inserto para utilizarlo posteriormente las alternativas son:  Variable @@Identity  devuelve el último ID generado en cualquier sesión activa (tener cuidado ya que al ser en cualquier sesión activa puedes obtener un ID no esperado). Función IDENT_CURRENT('nombre de la tabla') con este vamos a saber el ultimo id que se genero sea quien sea la sesión o usuario que lo inserto.  Función SCOPE_IDENTITY() devuelve el id generado de cualquier tabla de sesión activa, es la función más recomendada y que más se utiliza cuando se aplica después de un insert en algun procedimiento almacenado por ejemplo.  Aquí también les dejo otras recomendaciones a cerca de otros casos muy interesantes de conocer:  Cómo reiniciar el identity de una t

¿Cómo hacer un insert masivo y obtener los id's que se están insertando?

Imagen
Aquí nuestro código de ejemplo:  DECLARE @tabla TABLE (ticketId int, code varchar(10)); INSERT INTO TicketBack(ticketId, matchDay, code, creditID) output inserted.ticketId, inserted.code into @tabla SELECT ticketId, MatchDay, code, creditID FROM dbo.Tickets WHERE ticketid > 100 select * from @tabla

Orden de procesamiento lógico de la instrucción SELECT.

Hace días tuve la oportunidad de estar en un curso de Arquitectura de Software, en donde el arquitecto tomo un tema muy interesante el orden de procesamiento lógico de las instrucciones, dado esto me causo mucho interés por el hecho que desde aquí comienza el buen rendimiento de una consulta.  A continuación se muestra el orden de procesamiento lógico, para la instrucción SELECT. Esté orden determina cuando se ponen a disposición de los objetos definidos en un solo paso a las clausulas en las etapas subsiguientes. Al ejecutar una consulta el orden de ejecución es:  1. FROM  2. ON 3. JOIN  4. WHERE 5. GROUP BY  6. WITH CUBE or WITH ROLLUP 7. HAVING 8. SELECT  9. DISTINCT  10. ORDER BY  11. TOP

Comprobar que un procedimiento almacenado existe y borrarlo.

Con el siguiente script se puede validar si un procedimiento almacenado existe en una base de datos de SQL Server 2008, en caso de existir es borrado.  Sintaxis:  IF EXISTS ( SELECT * FROM sys.objects WHERE object_id = OBJECT_ID (N ' [MyStoredProc]' ) AND type in (N ' P' , N ' PC' )) DROP PROCEDURE [MyStoredProc] GO CREATE PROCEDURE [MyStoredProc] ... --

Crear funcione en SQL Server devolviendo tabla.

Imagen
Crear funcion en SQL Server para devolver una tabla

Utilizando Procedimientos Almacenados de Sistema de Sql Server.

Imagen
Existen gran cantidad de procedimientos de sistema que nos pueden proporcionar distintos datos que pueden ser muy importantes al momento de manejar o administrar una base de datos Microsoft SQL Server.  Para ejecutar un procedimiento almacenado de sistema se puede realizar utilizando el comando EXECUTE, como cuando ejecutamos cualquier otro, además es necesario proporcionar el nombre del procedimiento y vincular los parámetros del mismo.  Algunos ejemplos de procedimientos de sistema podrían ser:  Obtener Todas las Bases de Datos Del Servidor. EXECUTE sys.sp_databases; Obtener el detalle de una tabla. EXECUTE ssys.sp_helpp (nombre de la tabla como parámetro).  Obtener información de bloqueos y ejecuciones actuales.  EXECUTE sys.sp_who2 Realmente existe una gran variedad de procedimientos almacenados de sistema que nos pueden ayudar a la administración de la base de datos, por lo que estos solo son algunos sencillos procedimientos almace

Asignar y obtener datos de RitchTextbox y almacenarlo en base de datos Microsoft SQL Server, obtener de base de datos y obtener en RitchTextbox nuevamente en VarBinary con WPF y SQL Server.

Imagen
Asignar y obtener datos de RitchTextbox y almacenarlo en base de datos Microsoft SQL Server, obtener de base de datos y obtener en RitchTextbox nuevamente en VarBinary con WPF y SQL Server.

Clausula INTO (creacion de tabla con registros a partir de select).

El día de hoy respondiendo la pregunta de @erickNungaray, es posible crear una tabla física e insertar datos en ella en una sola instrucción a partir de otra tabla (o varias tablas) con la siguiente sintaxis:  SELECT CAMPOSNUEVATABLA into NombreNuevaTabla FROM TABLA WHERE CONDICIONES; Esto quiere decir, que es posible generar una tabla a partir de una consulta que nosotros realicemos, por lo que al hacer esto se generara unos campos a partir de los campos que consultamos al mismo tiempo está tabla tendrá todos los registros obtenidos en la consulta.  Esto puede ser aplicado a tablas temporales únicamente con la siguiente sintaxis:  SELECT CAMPOSNUEVATABLA into #NombreNuevaTablaTemporal FROM TABLA WHERE CONDICIONES; Espero con esto se solucione tu duda.  Para mayor información pueden consultar la clausula INTO en msdn , o en el siguiente enlace:  https://msdn.microsoft.com/es-es/library/ms177563(v=sql.120).aspx

Reiniciar campo identity en SQL Server.

El día de ayer me hicieron una pregunta la cuál decidí escribir, ¿cómo reiniciar el valor de identidad de una tabla o si es posible hacerlo? Los valores identity son especificaciones que permiten que el campo correspondiente incremente en forma secuencia, basado en la regla especificada, por ejemplo identity(1,1) especifica que cada que se inserte un registro tomará el campo identity el valor de 1, 2, 3, 4, 5, 6 ... n.  Por lo que al momento de borrar un registro o que exista un error y no pueda insertar el registro en la tabla, el valor identity no se inicializa, si no que continúa con el valor siguiente:       Para modificar este comportamiento utilizaremos la siguiente instrucción: Sintaxis: DBCC CHECKIDENT ( <nombre_tabla> , RESEED , 0 ) Ejemplo: DBCC CHECKIDENT ( TblAlumnos , RESEED , 0 ) Compartan la información, dejen sus comentarios o dudas.  Saludos.

Creación de base de datos SQL (SQL Create DataBase).

Crear base de datos.  Introducción:  El objetivo de este articulo es crear una base de datos en SQL Server. Se mostraran las instrucciones concisas para aquellos que desean ver rapidamente lo que SQL Server es. Cabe mencionar que este tipo de instrucciones SQL se pueden utilizar en otros gestores de base de datos como Access, MYSQL, Oracle, DB2 o alguna otra plataforma de almacenamiento de datos. El SQL CREATE DATABASE. La instrucción CREATE DATABASE se utiliza para crear una base de datos.  Sintaxis para crear BASE DE DATOS CREATE DATABASE  nombreBaseDeDatos ; Ejemplo para crear BASE DE DATOS La siguiente sentencia SQL crea una base de datos llamada "Datos": CREATE DATABASE datos; Dejen sus dudas o comentarios. 

SQL SERVER – Obtener fecha de modificacion de procedimientos almacenados, funciones y tablas.

En estos días me ha tocado hacer interesante hasta cierto punto, ya que uno de mis clientes me solicito un pequeño aplicativo muy sencillo y simple que lo único que hace es conectarse a dos ambientes de base de datos y comparar los objetos que se tienen en un esquema y en otro mostrando cuales objetos existen y cuales no en una base de datos, así también en caso de existir cuales son los objetos más nuevos, mostrando una especie de versiones de esquemas de base de datos. Cuando me solicitaron esté pequeño aplicativo, una de mis primeras preguntas fue en que nos basaremos para determinar que objeto es más nuevo, el fácilmente basándose en los procesos que llevan a cabo me dijo en la fecha de modificación de mis objetos, de está manera les dejo algunos de los querys que utilice para determinar este detalle en cada uno de los componentes (objetos) de base de datos. Obteniendo los Procedimientos Almacenados (Stored Procedures). SELECT name, modify_date FROM sys.objects WHERE ty

Listar todos los procedimientos almacenados de una base de datos (T-SQL).

Esté articulo mostraremos como listar todos los procedimientos almacenados que se encuentran creados en una instancia de Sql Server, esto para responder a @JorgeLuis19 y @AlbertoHdz89, que nos hicieron el comentario en una publicación para realizar esto, sería de la siguiente manera: SELECT ROUTINE_NAME AS Nombre FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE' ORDER BY ROUTINE_NAME De esa manera mostraremos todas las rutinas que sean de tipo ' PROCEDURE '. Espero que les sirva, dejen sus comentarios o dudas.

Desarrollando Aplicaciones en Capas C# con WPF.

Aquí dejando un ejemplo de como estructurar una aplicación por capas dejen sus dudas y/o comentarios y suscriban se al canal si quieren recibir nuestros vídeos. Suscribanse y compartan si les gusto o sirvió de algo, y dejen sus dudas o comentarios.

Ejecutar script base de datos SQL desde linea de comandos.

Imagen
El día de hoy vamos a mostrar como ejecutar un script de base de datos de SQL Server desde línea de comando o también llamado el famoso MSDOS, muchos de nosotros nos preocuparemos porque deseo ejecutar desde línea de comando si tengo el excelente SQL Management claro yo también pienso lo mismo, bueno ok no, en esté caso lo necesitaremos ejecutar por línea de comando porque tenemos un archivo muy grande el cual al intentarlo ejecutar desde Management Studio de SQL nos ocurrira un error como este "Not enough storage is available to process this command (Exception from HRESULT: 0x800070008), como lo muestro en la imagen a continuación. Por esto y para esto requerimos hacer una ejecución desde línea de comandos, esto usualmente sucede cuando tenemos un archivo muy pesado para la ejecución, ahora si como podemos ejecutar un archivo es simple.  Abrimos una ventana de MSDOS (Simbolo del sistema) o como le quieran llamar una vez ubicados en la pantalla, colocaremos la siguient

SQL: Concatenar varios registros de una columna en una sola cadena / concatenate strings from a column into a single string

En días pasados tuve que optimizar un procedimiento almacenado, por segunda ocasión ya que esté procedimiento almacenado, era necesario ejecutar n veces durante el día, el procedimiento almacenado llego a tardar 2 hrs ejecutándose entre muchos cambios al final el tiempo fue  de 1 minuto con 50 segundos, entre muchos cambios de los que se hice era quitar unos CURSORES los cuales concatenaban columnas mediante una consulta, por lo que. Es probable que tengamos varios registros que pertenezcan a una misma columna o campo y los queremos concatenar para que la consulta sql nos devuelva un solo registro en esté campo tenemos algo así: name =========== Juan Francisco Erick Y nosotros necesitamos obtener algo así:  Juan, Franscisco, Erick es decir, como si tuvieramos que trasponer la columna, pero sin complicarnos. La solución es la siguiente: