0% encontró este documento útil (0 votos)
69 vistas25 páginas

SQL Server Intermedio

Descargar como pdf o txt
Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1/ 25

TALLER INTERNACIONAL

SQL SERVER
INTERMEDIO
Instructor: Ing. Gerardo Valdez Medina
TABLA CONTENIDO

MODULO 1: RELACIONANDO DATOS CON MULTIPLES TABLAS


Uso de JOINS o INNER JOINS
o OUTER JOINS o
LEFT OUTER JOINS o
RIGHT JOINS o FULL
JOINS o CROSS JOINS
o SELF JOINS
o UNION

MODULO 2: SUBCONSULTAS
• Definición de Subconsulta
• Tipos de Subconsultas o Subconsultas de una sola fila
o Subconsultas de múltiples filas

MODULO 3: MODIFICANDO DATOS


• Cláusula INSERT y UPDATE
• Cláusulas DELETE y TRUNCATE TABLE
• Sentencia MERGE
• BULK COPY

MODULO 4: PROGRAMACIÓN SQL


• Batchs y scripts
• Comando GO
• Variables en SQL y su declaración o
Tipos de variables
• Control de Flujo o Bloque BEGIN
END o Bloque IF o WHILE, BREAK,
o CONTINUE
o GOTO
o Instrucción EXCECUTE o Bloque CASE
• Manejo de errores o TRY CATCH o
RAISERROR o PRINT o
Transacciones
o Tipos o Errores dentro de la Transacción

o ROLLBACK y SAVE

2
MODULO 5: TRIGGERS Y PROCEDIMIENTOS
• Creación de TRIGGERS
• Restricciones o AFTER, INSTEAD OF TRIGGERS o INSERT, DELETE, UPDATE TRIGGER
• Definición de Procedimiento Almacenado
• Características y ventajas de los procedimientos
• Tipos de procedimientos
• Creación y llamadas a procedimientos
• Modificación y eliminación de procedimientos
• Procedimientos con parámetros

MODULO 6: FUNCIONES Y CURSORES


• Funciones Escalares
• Funciones Tabulares
• Cursores
• Sentencias OPEN y FETCH
• NEXT
• PRIOR
• FIRST
• LAST
• CLOSE
• DEALLOCATE

MODULO 7: CONVERSIÓN DE DATOS


• CAST
• CONVERT
• PARSE
• FORMAT
• Manejo de fechas

3
MÓDULO 1: RELACIONANDO DATOS CON MULTIPLES TABLAS
Las vinculaciones entre tablas se realizan mediante la cláusula INNER que combina registros de dos tablas
siempre que haya concordancia de valores en un campo común.

INNER JOIN

Se puede utilizar una operación INNER JOIN en cualquier cláusula FROM. Esto crea una combinación por
equivalencia, conocida también como unión interna. Las combinaciones equivalentes son las más comunes;
éstas combinan los registros de dos tablas siempre que haya concordancia de valores en un campo común
a ambas tablas.

Su sintaxis es:

SELECT campos FROM tabla1 INNER JOIN tabla2 ON tabla1.campo1 comp tabla2.campo2

Tabla1 y tabla2 son los nombres de las tablas desde las que se combinan los registros. Campo1 y campo2
Son los nombres de los campos que se combinan. Si no son numéricos, los campos deben ser del mismo
tipo de datos y contener el mismo tipo de datos, pero no es necesario que posean el mismo nombre. Comp
es cualquier operador de comparación relacional: =, <,<>, <=, =>, ó >.

En nuestra base de datos de clínica, supongamos que necesitamos unir las tablas de paciente y atención.
Para ello realizaremos la siguiente consulta:

SELECT paciente.nombre, Atencion.Fecha_atenciòn from paciente inner join Atencion on


paciente.id_paciente= Atencion.id_paciente

4
OUTER JOIN

Una operación outer join arroja todas las filas coincidentes y alguna o todas las filas no coincidentes,
dependiendo del tipo de outer join que se cree. SQL soporta tres tipos de outer joins:

• Left Arroja todas las filas coincidentes y todas las filas no coincidentes de la tabla de la izquierda (la
tabla a la izquierda de la palabra clave JOIN).

• Right Arroja todas las filas coincidentes y todas las filas no coincidentes de la tabla de la derecha (la
tabla a la derecha de la palabra clave JOIN).

• Full Arroja todas las filas coincidentes y todas las filas no coincidentes de ambas tablas.

Una operación outer join sigue la misma sintaxis que una operación inner join, sólo que en lugar de utilizar
las palabras clave INNER JOIN (o solamente la palabra clave JOIN), se aplica LEFT OUTER JOIN, RIGHT OUTER
JOIN o FULL OUTER JOIN. Observe que la palabra clave OUTER es opcional. Por ejemplo, se puede especificar
LEFT JOIN en lugar de LEFT OUTER JOIN.

5
CROSS JOIN

SQL soporta otro tipo de operación llamada cross join. Esta operación es prácticamente idéntica a la
operación join separada por comas. La única diferencia es que, en lugar de separar los nombres de columna
con una coma, se utilizan las palabras clave CROSS JOIN. Por ejemplo, tomemos una instrucción que se
utilizó anteriormente y modifiquémosla reemplazándola con las palabras clave CROSS JOIN:

UNION.

La cláusula UNION permite unir dos o más conjuntos de resultados en uno detrás del otro como si se tratase
de una única tabla. De este modo podemos obtener los registros de más de una tabla "unidos".

• Para utilizar la cláusula UNION debemos cumplir una serie de normas.

• Las consultas por unir deben tener el mismo número campos, y además los campos deben ser del
mismo tipo.

• Sólo puede haber una única clausula ORDER BY al final de la sentencia SELECT.

6
MÓDULO 2: SUBCONSULTAS
Las subconsultas, al igual que las operaciones join, proporcionan una forma de acceder a datos en múltiples
tablas con una sola consulta. Una subconsulta puede agregarse a una instrucción SELECT, INSERT, UPDATE
o DELETE para permitir a esa instrucción utilizar los resultados de la consulta arrojados por la subconsulta.
La subconsulta es esencialmente una instrucción SELECT incrustada que actúa como una puerta de entrada
a los datos en una segunda tabla. Los datos arrojados por la subconsulta se utilizan como la instrucción
primaria para cumplir cualquier condición que haya sido definida en la instrucción. En este capítulo se
discutirá cómo se utilizan las subconsultas en diferentes instrucciones, particularmente en instrucciones
SELECT, y se proporcionarán ejemplos que demuestren cómo crear subconsultas y qué tipo de resultados
de consulta esperar.

Se pueden dividir las subconsultas de una cláusula WHERE en dos categorías generales: aquellas que pueden
arrojar múltiples filas y aquellas que pueden arrojar solamente un valor. En esta sección se analizará la
primera de estas categorías. En la siguiente sección, “Crear subconsultas que arrojan un solo valor”, se
analizará la segunda categoría. Mientras se expande cada tema, sin duda usted reconocerá los formatos de
instrucción desde la discusión de los predicados. A pesar de que esta información pudiera parecer un poco
repetitiva (es por eso que se tocará de manera breve), se presenta aquí no solamente para proporcionar un
repaso cohesivo de las subconsultas, sino también para proporcionar una perspectiva diferente. En otras
palabras, en lugar de mirar las subconsultas a través de la perspectiva del predicado, miraremos
directamente a la subconsulta en sí.

UTILIZANDO IN
El predicado IN compara valores de una columna en la tabla primaria con valores arrojados por la
subconsulta. Si el valor de la columna se encuentra en los resultados de la subconsulta, esa fila (de la tabla
primaria) se arroja en los resultados de la consulta de la instrucción SELECT. Como ejemplo:

7
Como se ve en el ejemplo anterior, se extraen las atenciones realizadas a un paciente en específico,
buscando por el nombre (dato que por supuesto, no se encuentra en la tabla atenciones.) EXISTS

En algunas circunstancias se puede requerir que la subconsulta arroje solamente un valor de verdadero o
falso. El contenido de los datos en sí mismo no es importante, en términos de cumplir con la condición de
un predicado. En este caso, se puede utilizar un predicado EXISTS para definir la subconsulta. El predicado
EXISTS se evalúa como verdadero si una o más filas son arrojadas por la subconsulta; de otra manera, se
evalúa como falso. Para que un predicado EXISTS sea de utilidad, la subconsulta asociada deberá incluir una
condición de búsqueda que haga coincidir los valores en las dos tablas que están siendo vinculadas a través
de la subconsulta.

En la instrucción, cada fila arrojada por la instrucción SELECT principal se evalúa con la subconsulta. Si la
condición especificada en el predicado EXISTS es verdadera, la fila se incluye en los resultados de la consulta;
de otra manera, la fila es omitida. Cuando la condición especificada es verdadera, eso significa que al menos
una fila ha sido arrojada por la subconsulta.

SUBCONSULTA PARA MODIFICAR DATOS.


Una instrucción INSERT, como sin duda recordará, permite agregar datos a una tabla existente. Se pueden
agregar esos datos directamente a la tabla o a través de una vista que permita insertar datos a la tabla
subyacente. Si se utiliza una subconsulta en una instrucción INSERT, debe ser incluido como uno de los
valores definidos en la cláusula VALUES.

INSERT INTO Atencion VALUES

(‘12/05/2016',( SELECT id_paciente FROM paciente WHERE nombre = 'Gabriela Peñaloza' ),2 );

En la sentencia anterior, se utilizó una subconsulta para extraer el identificador de un nombre de paciente
en específico y de esa manera, poder insertarlo en la tabla Atención.

8
MÓDULO 3: MODIFICANDO DATOS.

INSERT
la instrucción INSERT permite agregar datos a las diferentes tablas en una base de datos. Se presenta la
sintaxis básica en esta. La sintaxis de una instrucción INSERT básica es relativamente sencilla:

INSERT INTO [ ( ) [ { , }... ] ) ] VALUES ( [ { , }... ] )

En la sintaxis, sólo son obligatorias la primera y la última línea. La segunda línea es opcional. Tanto la primera
como la segunda línea son parte de la cláusula INSERT INTO. En esta cláusula se debe identificar el nombre
de la tabla (o vista) en la cual se agregarán los datos. El nombre de la tabla sigue a las palabras clave INSERT
INTO. Entonces el usuario tiene la opción de identificar los nombres de la columna en la tabla que recibirán
los datos. Éste es el propósito de la segunda línea en la sintaxis. Es posible especificar una o más columnas,
y todas ellas deberán estar dentro de paréntesis. Si se especifican más columnas, éstas deberán estar
separadas por comas.

• En la tercera línea de la sintaxis, que se refiere a la cláusula VALUES, se deben especificar uno o más
valores que serán ingresados en la tabla. La lista de valores deberá estar encerrada en paréntesis y,
si se especifica más de uno, deberán estar separados utilizando comas. Asimismo, los valores deben
cumplir los siguientes requisitos:

• Si los nombres de columna no se especifican en la cláusula INSERT INTO, entonces deberá haber un
valor por cada columna en la tabla y los valores deberán estar en el mismo orden en el que están
definidos en la tabla.

• Si los nombres de columna se especifican en la cláusula INSERT INTO, entonces deberá haber
exactamente un valor por cada columna especificada y esos valores deberán estar en el mismo
orden en el que están definidos en la cláusula INSERT INTO.

Sin embargo, los nombres y valores de columna no tienen que estar en el mismo orden que las columnas
en la definición de la tabla. Se debe proporcionar un valor por cada columna en la tabla excepto para las
columnas que permiten valores nulos o que tienen un valor definido por defecto. Cada valor con un carácter
del tipo de datos de cadena debe estar encerrado en comillas sencillas. Se puede utilizar la palabra clave
NULL (o null) como el valor de los datos en la cláusula VALUES para asignar un valor nulo a cualquier columna
que permita valores nulos.

9
Si se intenta ejecutar una instrucción INSERT omitiendo una columna que no permita valores nulos y que
no tenga un valor por defecto definido, se arrojará como resultado un error. Cuando se inserta una nueva
fila, el RDBMS debe obtener un valor para cada columna desde algún lado, por lo que si no se permiten los
valores nulos, entonces el valor debe venir ya sea de un valor por defecto (si está definido) o de la cláusula
VALUES de la instrucción INSERT.

UPDATE
Como su nombre lo indica, la instrucción UPDATE permite actualizar los datos en una base de datos SQL.
Con la instrucción UPDATE se pueden modificar datos en una o más filas para una o más columnas. La
sintaxis para la instrucción UPDATE se puede mostrar de la manera siguiente:

UPDATE <nombre de la tabla> SET <determinar expresión de la cláusula> [ {, <determinar expresión de


la cláusula> }... ] [ WHERE <condición de búsqueda> ]

Como se puede ver, la cláusula UPDATE y la cláusula SET son obligatorias, mientras que la cláusula WHERE
es opcional. En la cláusula UPDATE se debe especificar el nombre de la tabla (o vista) que se está
actualizando. En la cláusula SET se debe especificar una o más expresiones de cláusula.

10
Se debe especificar una condición o conjunto de condiciones que actúa como un filtro para las filas que se
están actualizando. Solamente las filas que cumplen con estas condiciones son actualizadas. En otras
palabras, solamente las filas cuyo resultado es verdadero son actualizadas.

Ejemplo:

UPDATE Paciente SET edad = 27 WHERE id_paciente = 1;

Se realizará el cambio de la edad del paciente que tenga id 1.

DELETE
Contiene solamente dos cláusulas, y una sola de ellas es obligatoria. La siguiente sintaxis muestra qué tan
básica es la instrucción DELETE:

DELETE FROM [ WHERE]

Como se puede ver, la cláusula DELETE FROM requiere que se especifique el nombre de la tabla (o vista) de
la cual se quieren eliminar filas. La cláusula WHERE, la cual es similar a la cláusula WHERE en una instrucción
SELECT y en una instrucción UPDATE, requiere que se especifique una condición de búsqueda. Si no se
incluye una cláusula WHERE en la instrucción DELETE, todas las filas serán eliminadas de la tabla
especificada. Es importante comprender que la instrucción DELETE no elimina la tabla en sí, sino solamente
filas en la table.

Ejemplo:

DELETE FROM paciente WHERE id_paciente=1

11
TRUNCATE
Para realizar un borrado completo de tabla debemos considerar la posibilidad de utilizar la sentencia
TRUNCATE, mucho más rápida que DELETE. Es decir, todos los registros que se encuentren en la tabla serán
eliminados.

La sintaxis de la sentencia TRUNCATE es la siguiente:

TRUNCATE TABLE <nombre_tabla>


Como ejemplo, Podemos elimiar todos los datos de atencion:

TRUNCATE TABLE Atencion;

12
MÓDULO 4: PROGRAMACION SQL
PROCEDIMIENTO Y FUNCIONES.

La forma más sencilla de distinguir entre los procedimientos y funciones invocados por SQL es considerar
un procedimiento como un conjunto de una o más instrucciones SQL almacenadas, similar a cómo una vista
almacena una instrucción SELECT, y considerar una función como un tipo de operación que arroja un valor,
similar a las funciones SET como SUM o AVG.

CREATE PROCEDURE

La primera sintaxis que veremos es aquella que sirve para crear un procedimiento. En su nivel más básico,
la instrucción CREATE PROCEDURE luce de la siguiente manera:

CREATE PROCEDURE nombre_proc ( [ <declaración de parametros[ { , declaración de parametros } ... ] ] )


[ característica de rutinas... ] Cuerpo de rutinas

Como se puede ver, debe proporcionarse un nombre para el procedimiento (en la cláusula CREATE
PROCEDURE) seguido por cero o más declaraciones de parámetro, que van encerradas en paréntesis. Se
deben proporcionar los paréntesis incluso si no se define ninguna declaración. Después de las declaraciones
de parámetro se tiene la opción de definir una o más características de la rutina. Por ejemplo, se puede
especificar si una rutina es SQL o una escrita en otro lenguaje, por ejemplo, C o Java.

CREATE FUNCTION

Ahora demos un vistazo a la instrucción utilizada para crear una función invocada por SQL. Como se puede
ver en la siguiente sintaxis, una función contiene unos cuantos elementos más que un procedimiento:

CREATE FUNCTION nombre_func( [ <declaración de parametros[ { , declaración de parametros } ... ] ]


)RETURNS tipo_datos

VARIABLES LOCALES

Además de permitir pasar los parámetros a un procedimiento, SQL también proporciona una forma para
crear variables locales en la definición del procedimiento que puedan ser utilizadas dentro del cuerpo del
procedimiento. Una variable local puede ser considerada como un tipo de marcador de posición que
mantiene un valor en la memoria durante la ejecución de las instrucciones en el cuerpo de la rutina. Una
vez que las instrucciones han sido ejecutadas, la variable deja de existir.

Sintaxis:

DECLARE @nombre_variable tipo_datos

13
Siguiendo este mismo ejemplo, vamos a crear la variable resultado para una posterior operación.

En este caso aplicaríamos lo siguiente:

Una vez que se ha declarado la variable, debe asignársele un valor antes de que pueda ser referenciada.
(Sin embargo, algunas implementaciones asignan automáticamente un valor nulo a las variables en el
momento de ser definidas.) Se puede utilizar la instrucción SET para asignar un valor a una variable
utilizando la siguiente sintaxis:

) y ambos son CD de New Age. En una definición de procedimiento no se está limitado solamente a una
variable. Se puede crear una instrucción DECLARE para cada variable que se quiera incluir. También es
posible incluir múltiples variables en una instrucción, si esas variables están asignadas al mismo tipo de
datos.

14
INSTRUCCIONES CONDICIONALES.

IF

La instrucción utiliza las palabras clave IF, THEN y ELSE para establecer las condiciones y definir las
acciones a tomar: si (if ) se cumple la condición, entonces (then) se ejecuta la instrucción SQL, o se toma
alguna otra (else) acción.

WHILE la cláusula WHILE finaliza la repetición automáticamente cuando la condición se evalúa como

falsa.

Nótese que muchas implementaciones, incluyendo Oracle y SQL Server, utilizan un bloque BEGIN en lugar
de la palabra clave DO para encerrar las instrucciones que se van a repetir por el bucle de repetición WHILE.
Un punto más en el que hay que poner atención es dónde se evalúa la condición en la lógica de repetición.
Algunas implementaciones evalúan la condición al principio de la repetición. Otras la evalúan al final de la
repetición, lo que significa que las instrucciones en la repetición siempre se ejecutarán por lo menos una
vez, incluso si la condición se evalúa como falsa la primera vez que se inicia la repetición.

EXECUTE

Una vez que se ha preparado la instrucción, puede entonces utilizarse la función Execute( ) para ejecutar la
instrucción. La función Execute( ) solamente ocupa un argumento (el indicador de instrucción que contiene
la instrucción preparada.

Siguiendo el ejemplo anterior, para ejecutar esta instrucción deberá incluir:

EXECUTE mayoría_edad

15
CASE

Una expresión de valor CASE permite determinar una serie de condiciones que modifican valores específicos
arrojados por la instrucción SQL. Se puede cambiar la forma en que un valor está representado o se calcula
un nuevo valor. Cada valor es modificado de acuerdo con la condición especificada dentro de la expresión
CASE. Una expresión de valor incluye la palabra clave CASE y una lista de condiciones. La última condición
proporciona una condición por defecto si ninguna de las condiciones anteriores ha sido cumplida. Entonces
la expresión de valor se cierra utilizando la palabra clave END.

16
MANEJO DE ERRORES

Cuando se incrusten instrucciones SQL en el lenguaje host, se deberá proporcionar una forma de tomar
acciones específicas si se recibe un mensaje de error o de advertencia cuando se intenta acceder a los datos.
SQL proporciona un método relativamente sencillo que puede utilizarse para monitorear los errores y
advertencias y tomar acciones dependiendo de los resultados de ese monitoreo.

ROLLBACK

A pesar de que el objetivo de cualquier transacción es completar los cambios hechos por las instrucciones
en esa transacción, no hay duda de que existirán ocasiones cuando se quiera reinvertir esos cambios. Para
poder controlar estas reinversiones, se debe utilizar una instrucción ROLLBACK para deshacer los cambios
y eliminar la transacción, o para regresar los cambios a un punto de recuperación específico. La siguiente
sintaxis muestra los diferentes elementos que pueden ser incluidos en una instrucción ROLLBACK:

ROLLBACK [WORK] [ AND [NO] CHAIN ] [ TO SAVEPOINT <nombre del punto de recuperación> ]

MÓDULO 5: TRIGGERS
Existe un número de similitudes entre SGDB (por ejemplo, el uso de la instrucción CREATE TRIGGER para
crear un activador), y las implementaciones de activadores en varios productos comparten algunas
características básicas, particularmente aquellas que hacen posible dispararlo automáticamente para
realizar una acción secundaria relacionada con la acción primaria que invocó el activador.

Un Triggers es creado para generar una instrucción que se gatilla, cuando es invocada una acción primaria.

Por ejemplo, supongamos que no se permite la eliminación de algún usuario previa autorización, entonces
se genera un trigger que desencadenará un mensaje de advertencia indicando que no pueden ser
borrados los datos en la tabla en específico y evitará dicha acción.

Si sintaxis sería:

CREATE TRIGGER [NombreEsquema.]NombreTrigger ON {tabla | vista } [,...n] ]

{FOR|AFTER|INSTEAD OF} {[INSERT][,] [UPDATE][,][DELETE]} AS sentencia_sql [;] [,...n ]

NombreTrigger es el nombre que le queremos dar al desencadenador.

Tabla | vista es el nombre de la tabla o vista en la que se ejecuta el desencadenador. Sólo se puede hacer
referencia a una vista mediante un desencadenador INSTEAD OF. No es posible definir desencadenadores
DML en tablas temporales locales o globales.

DELETE INSERT UPDATE Especifica las instrucciones de modificación de datos que activan el
desencadenador cuando se intenta ejecutarlas en esta tabla o vista. Se debe especificar al menos una
opción. En la definición del desencadenador se permite cualquier combinación de estas opciones, en
cualquier orden.

17
A pesar de que el estándar SQL no soporta ninguna clase de instrucción que permite alterar un activador,
sí soporta una forma de eliminar un activador, que se logra utilizando la instrucción DROP TRIGGER. Como
se puede ver en la siguiente sintaxis, esta instrucción es muy básica:

DROP TRIGGER <nombre>


Ejemplo:

Como se ve en la imagen, se crea un triggers que no permite el borrado de datos.

Procederemos a intentar el borrado de datos de la tabla médico.

Para usar un trigger, pueden ser utilizado 3 metodos:

AFTER indica que el desencadenador sólo se activa cuando todas las operaciones especificadas en la
instrucción SQL desencadenadora se han ejecutado correctamente. Además, todas las acciones

18
referenciales en cascada y las comprobaciones de restricciones deben ser correctas para que este
desencadenador se ejecute. BEFORE indica que las sentencias serán ejecutadas después.

INSTEAD OF indica que se ejecuta el desencadenador en vez de la instrucción SQL desencadenadora, por lo
que se suplantan las acciones de las instrucciones desencadenadoras.

Como máximo, se puede definir un desencadenador INSTEAD OF por cada instrucción INSERT, UPDATE o
DELETE en cada tabla o vista. No obstante, en las vistas es posible definir otras vistas que tengan su propio
desencadenador INSTEAD OF.

MÓDULO 6: FUNCIONES Y CURSORES.


Cuando se trabaja con los datos SQL de forma interactiva, tener los datos arrojados en conjuntos raramente
representa un problema debido a que normalmente es posible desplazarse a través de los resultados de la
consulta para encontrar la información que se necesita. Si el tamaño de los resultados es demasiado extenso
para desplazarse fácilmente, es posible hacer más preciso el enfoque de la expresión de búsqueda para
arrojar un conjunto de resultados más manejable. Sin embargo, la mayoría de los accesos de datos se hace
a través de medios diferentes a la invocación directa (a pesar del hecho de que accedemos a los datos de
forma interactiva a través de todo el libro). Uno de los métodos más comunes, el SQL incrustado, accede a
los datos a través de instrucciones SQL incrustadas en un programa de aplicación. Los elementos de datos
arrojados por las instrucciones SQL son utilizados por un lenguaje de programación externo (el lenguaje
host) para soportar procesos de aplicación específicos.

La mayoría de los lenguajes de programación de aplicación soportan el uso de cursores para recuperar datos
de una base de datos SQL. El lenguaje del cursor está incrustado en el código de programación de una forma
muy parecida a la que se incrustaría cualquier instrucción SQL. Cuando se utiliza un cursor en un lenguaje
de programación, primero se debe declarar el cursor (similar a como se declararía una variable) y luego
utilizar el nombre de la instrucción (el nombre que se le asignó al cursor) en otras instrucciones SQL
incrustadas para abrir el cursor, recuperar filas individuales a través del cursor y cerrar el cursor.

Para poder trabajar con Cursores debemos realizar los siguientes pasos:

declare cursor prueba _ cursor for select

nombres apellidos , from persona

/* :*/ ahora declaramos las variables con las que vamos a recorrer el cursor

declare @ nombres varchar(25) declare

@ apellidos varchar(25)

/* */ Abrimos el cursor para iniciar el recorrido del mismo

open cursor prueba _

/* Se mueve al siguiente registro dentro del cursor y los asignamos a las variables antes

declaradas*/

19
fetch next from cursor prueba _

into @ , nombres apellidos

/* , 0 Retorna el estatus del último registro recorrido en el cursor cuando es igual a encontró

registro pendientes de recorrer */ while

@@ _ fetch status = 0

begin

print' : ' El Nombre de la persona es + @ + nombres ' : ' y sus apellidos + apellidos /*

*/ Se mueve al siguiente registro dentro del cursor

fetch next from cursor prueba _ into

@ , nombres apellidos

end

/* , Cuando concluimos con el recorrido del cursor este debe ser cerrado y luego destruído

mediante las siguientes sentencias :*/

close cursor prueba _ -- . Cierra el cursor

Deallocate cursor prueba _ -- .

Los cursores son muy eficientes para utilizarlos en Job de las bases de datos que realiza alguna operación
donde necesitamos modificar alguna información dentro de un bucle. Los cursores demandan mucho del
servidor de base datos por lo tanto no es recomendable abusar del mismo ya que necesitan bastantes
recursos para su ejecución.

20
MÓDULO 7: CONVERSION DE DATOS

Convierten una expresión de un tipo de datos en otro de forma explícita. CAST y CONVERT proporcionan
funciones similares. Su sintaxis para ambas consultas se muestra a continuación:

CAST (expresión AS tipo_dato [ (longitud)])

CONVERT (tipo_dato [ (longitud)] , expresión [ , estilo ] )

expresión Es cualquier expresión válida. tipo_dato Es el tipo de datos de destino proporcionado por el
sistema. Incluye xml, bigint y sql_variant. No se pueden utilizar tipos de datos de alias.

Longitud es un parámetro opcional de los tipos de datos nchar, nvarchar, char, varchar, binary o varbinary.
Para CONVERT, si no se ha especificado el parámetro longitud, el valor predeterminado es 30 caracteres.

Es el estilo del formato de fecha usado para convertir datos de tipo datetime o smalldatetime en datos de
caracteres (con tipo de datos nchar, nvarchar, char, varchar, nchar o nvarchar), o para convertir datos de
caracteres de formatos de fecha y hora conocidos en datos de tipo datetime o smalldatetime; o bien, el
formato de cadena usado para convertir datos de tipo float, real, money o smallmoney en datos de
caracteres (con tipo de datos nchar, nvarchar, char, varchar, nchar o nvarchar). Cuando estilo es NULL, el
resultado devuelto también es NULL.

En las conversiones money a carácter los estilos utilizados son:

0 (predeterminado) Sin separadores de millar cada tres dígitos a la izquierda del separador decimal y
dos dígitos a la derecha del separador decimal; por ejemplo, 4235,98.

1 Separadores de millar cada tres dígitos a la izquierda del separador decimal y dos dígitos a la
derecha del separador decimal; por ejemplo, 3.510,92.

2 Sin separadores de millar cada tres dígitos a la izquierda del separador decimal y cuatro dígitos a la
derecha del separador decimal; por ejemplo, 4235,9819.

Ejemplo:

21
PARSE Y TRY_PARSE

La función PARSE permite convertir una cadena de texto a un valor numérico o de fecha/hora, y produce
un error en caso de no poder realizar la conversión. Es importante tener en cuenta, que la función PARSE
utiliza el motor (CLR) del NET Framework, ya que por ejemplo, mientras que la cadena 20130101 se puede
convertir a fecha con CAST y CONVERT, esta misma cadena no podrá ser convertida a fecha con PARSE.

Además, la función PARSE también permite realizar la conversión teniendo en cuenta la información de un
idioma especificado como parámetro.

Para complementar a la función PARSE, desde SQL Server 2012 también tenemos disponible a la función
TRY_PARSE, que es equivalente a PARSE, excepto que devuelve NULL (en lugar de generar una excepción)
cuando no puede realizar la conversión.

FORMAT

La función Format aplica desde SQL Server 2012 en adelante. Devuelve un valor con el formato previamente
indicado. Se puede utilizar para definir el formato de una fecha y hora o para retornar un numero como
varchar en un formato específico.

Su sintaxis es:

FORMAT(valor, formato, [cultura (opcional)])

El parámetro “valor” es el valor que quieres formatear, debe ser un dato compatible con la función. El
formato es precisamente como queremos nuestro resultado (ej. “C”, “D”, “g”, “dd/MM/yyyy”).

A continuación, se muestra un ejemplo extrayendo los datos de fecha de atención de la tabla atención. Se
puede apreciar que la fecha se encuentra en formato año-mes-día.

Veremos cómo podríamos cambiar el formato, dejando la fecha día, mes, año.

22
En variable fecha, estamos guardando la fecha de atención para id_atencion 1. Se utiliza esta variable para
utilizarla en la sentencia format.

MANEJO DE FECHAS

Las funciones de valor de fecha y hora proporcionan información acerca de la fecha y la hora actuales.
Cada función arroja un valor basado en la fecha u hora (o ambos) tal como están configurados en el
sistema operativo. getdate(): retorna la fecha y hora actuales. Ejemplo:

select getdate();

datepart(): retorna la parte específica de una fecha, el año, trimestre, día, hora, etc. Los valores para
"partedefecha" pueden ser: year (año), quarter (cuarto), month (mes), day (dia), week (semana), hour
(hora), minute (minuto), second (segundo) y millisecond (milisegundo).

Su sintaxis es:

23
Select datepart(partedefecha,fecha)

Ejemplos:

• select datepart(month,getdate()); retorna el número de mes actual.

• select datepart(day,getdate()); retorna el día actual.

• select datepart(hour,getdate()); retorna la hora actual.

Datename: Retorna el nombre de una parte específica de una fecha. Los valores para "partedefecha"
pueden ser los mismos que se explicaron anteriormente. Ejemplos: select datename(month,getdate());

retorna el nombre del mes actual;

dateadd: Agrega un intervalo a la fecha especificada, es decir, retorna una fecha adicionando a la fecha
enviada como tercer argumento, el intervalo de tiempo indicado por el primer parámetro, tantas veces
como lo indica el segundo parámetro. Los valores para el primer argumento pueden ser: year (año), quarter
(cuarto), month (mes), day (dia), week (semana), hour (hora), minute (minuto), second (segundo) y
millisecond (milisegundo).

Su sintaxis es:

24
Select dateadd(partedelafecha,numero,fecha)

En la siguiente imagen se agrega 3 meses a la fecha mencionada.

Otros ejemplos serían:

• select dateadd(hour,2,'1980/11/02'); retorna "1980/02/02 2:00:00", agrega 2 horas.

• select dateadd(minute,16,'1980/11/02'); retorna "1980/02/02 00:16:00", agrega 16 minutos.

• select dateadd(month,3,'1980/11/02'); retorna "1981/02/02", agrega 3 meses.

Datediff: Calcula el intervalo de tiempo (según el primer argumento) entre las 2 fechas. El resultado es un
valor entero que corresponde a fecha2-fecha1. Los valores de "partedelafecha) pueden ser los mismos que
se especificaron anteriormente.

Ejemplos:

• select datediff (day,'2005/10/28','2006/10/28'); retorna 365 (días).

• select datediff(month,'2005/10/28','2006/11/29'); retorna 13 (meses).

25

También podría gustarte