SQL Server documentation
SQL Server documentation
md 2024-10-02
Tipos de datos
--Tipos de datos
char -- almacenar tipos de datos de ancho fijo
varchar -- almacena tipos de datos alfanúmericos de ancho variable
text -- almacena tipos de datos texto
nchar -- almacena tipos de datos de ancho fijo
nvarchar -- almacena tipos de datos alfanúmericos de ancho variable
bit -- almacena valores de 1 y 0
int -- almacena valores entre -2,147,483,648, y 2,147,483,637
bigint -- almacena valores entre -9,223,372,036,854,775,808 y
9,223,372,036,854,775,807
decimal -- almacena valores entre -10^38 + 1 y 10^38 - 1
numeric -- almacena valores entre -10^38 + 1 y 10^38 - 1
money -- almacena valores entre -9,223,372,036,854,775,808 y
9,223,372,034,854,775,807
float -- almacena valores entre -1.79E + 308 y 1.79E + 308
1 / 53
SQL_Server.md 2024-10-02
Crear tabla
Recolectar campos
Borrar tabla
Limpiar tabla
2 / 53
SQL_Server.md 2024-10-02
DELETE FROM a diferencia del TRUNCATE TABLE permite realizar filtros o eliminar todo
Agregar columna
Eliminar Columna
Actualizar registros
UPDATE EMPLEADOS
SET NOMBRE = 'Cristiano'
WHERE id = 3;
Insertar registros
Clausula Where
3 / 53
SQL_Server.md 2024-10-02
SELECT NOMBRE,EDAD
FROM EMPLEADOS
WHERE EDAD=29;
Operadores
Operadores permitidos:
Comentarios
NULOS
4 / 53
SQL_Server.md 2024-10-02
-- Filtro nulo
SELECT * FROM CLIENTES
WHERE NOMBRE IS NULL; -- Nombre sea nulo
-- Inserción de nulo
INSERT INTO CLIENTES VALUES(1,'Jose','Calle Primera',NULL,'[email protected]');
CONSTRAINTS
Los CONSTRAINTS son reglas que tienen y se le pueden agregar a las tablas para seguir unas normas y evitar
posibles errores.
Se agrega un constraint por defecto, que no permite duplicados en el campo idpersona, ya que es clave
primaria de la tabla.
Constraint personalizado
De esta manera el CONSTRAINT se agrega con el nombre PK_ENLACE_PERSONA como PRIMARY KEY, indicando
que el campo idpersona es clave primaria. Agregar Constraint mediante alter table
Cuando un campo no cuenta con CONSTRAINT, se le puede adicionar uno aun asi ya exista la tabla. Eliminar
constraint mediante alter table
En este caso mediante ALTER TABLE se eliminan los constraint enlazados a los campos de las tablas. UNIQUE
CONSTRAINT
-- Version 2 (Directo)
-- Borrar constraint
6 / 53
SQL_Server.md 2024-10-02
Permite valores unicos en los campos, útil en la creación de identificadores únicos en las tablas, similar a los
números de celular, cédulas, etc.
-- Version 1
-- Version 2
-- Version 3
7 / 53
SQL_Server.md 2024-10-02
-- Eliminar constraint
ALTER TABLE PERSONAS
DROP CONSTRAINT CK_EDAD;
DEFAULT CONSTRAINT Usada para establecer un valor por defecto en una columna, en caso de no agregarle
un valor.
-- Version 1
DROP TABLE PERSONAS;
CREATE TABLE PERSONAS(
ID INT NOT NULL,
NOMBRE VARCHAR(10),
EDAD INT,
CIUDAD VARCHAR(50) DEFAULT 'No Tiene'
);
-- Version 1
DROP TABLE PERSONAS;
CREATE TABLE PERSONAS(
ID INT NOT NULL,
NOMBRE VARCHAR(10),
EDAD INT,
CIUDAD VARCHAR(50),
CONSTRAINT DF_CIUDAD DEFAULT 'No Tiene' FOR CIUDAD
);
-- Version 3
-- Borrar constraint
ALTER TABLE PERSONAS
DROP CONSTRAINT DF_CIUDAD;
IDENTITY CONSTRAINT Aumenta su campo a medida que va recibiendo inserts, igual que crear una
secuencia.
8 / 53
SQL_Server.md 2024-10-02
1:1
1:*
*:1
*:*
9 / 53
SQL_Server.md 2024-10-02
En este casoo la tabla ordenes depende la llave foranea ID_CLIENTE, por lo cual siempre que existe una
orden debera tener un cliente. A su vez un cliente puede tener muchas ordenes.
En caso de borrar un registro donde este tenga un campo relacionado en otra tabla, un cliente que ya
esta en ordenes, no se podra borrar porque viola la regla, se debería primero borrar las relaciones
BORRADO EN CASCADA En solución a lo anterior, se puede activar un borrado en cascada que borra a su
vez las relaciones pero esto puede causar borrados innecesarios por lo cual se debe manejar con cuidado
Vistas
Son tablas virtuales basadas en una consulta, pueden materializarse.
10 / 53
SQL_Server.md 2024-10-02
Modificar vista
Eliminar vista
Indices
Estructuras utilizadas para mejorar el rendimiento de las consultas
Nonclustered:
Renombrar indice
Eliminar indice
11 / 53
SQL_Server.md 2024-10-02
Indice agrupado
DISTINCT
Alias
Concatenación
Mediante el símbolo +
Casteo
Útil para cambio de formatos en valores con diferentes formatos o formatos que requeridos a la salida.
Operaciones
Las operaciones básicas +,-,*,/,% se encuentran en SQL y función de la misma forma que en otros lenguajes
de programación.
12 / 53
SQL_Server.md 2024-10-02
SELECT (30-12);
Esquemas
En SQL Server se maneja por defecto el esquema DBO, es decir un conjunto que asocia las bases de datos al
esquema DBO, sin embaro, este puede personalizarse a las caracteristicas requeridas por la base de datos.
Crear esquema
13 / 53
SQL_Server.md 2024-10-02
SELECT @@VERSION;
Para restaurarla se puede hacer mediante el gestor de bases de datos, dando clic derecho en Databases y
luego dar clic en Restaurar base de datos
ORDER BY
Funciones
MAX - MIN
SELECT
MAX(PRECIO) AS "Producto mas caro",
MIN(PRECIO) AS "Producto mas barato",
MAX(Nombre) AS "Ordenado alfabeticamente max",
MIN(Nombre) AS "Ordenado alfabeticamente min"
FROM articulos;
COUNT
SUM
AVG
14 / 53
SQL_Server.md 2024-10-02
Operadores
Útiles para operaciones lógicas, se pueden encontrar:
AND
OR
NOT
Between tipo texto Funciona tambien con valores textuales en orden alfabetico
Between fechas
15 / 53
SQL_Server.md 2024-10-02
Algunas funcionalidades del operador se le conocen como wildcards que son útiles para ejecución de
funciones regulares y condiciones.
JOIN
16 / 53
SQL_Server.md 2024-10-02
LEFT JOIN Todos los que esten en la izquierda asi no esten en la derecha.
SELECT C.NOMBRE,C.APELLIDO,O.ID_ORDEN
FROM CLIENTES C
LEFT JOIN ORDENES O
ON C.idcliente = O.idcliente
ORDER BY id_orden;
17 / 53
SQL_Server.md 2024-10-02
FULL JOIN Muestra todas las filas entre las 2 sin coincidencias. Enlace completo.
UNION Se deben tener las mismas columnas en los select y deben ser de los mismos tipos cada una.
GROUP BY
18 / 53
SQL_Server.md 2024-10-02
Subconsultas
Debe ir entreparéntesis
Especificar solo una columna o expresion
Usar con IN, ANY, ALL y EXISTS
No pueden contener Between ni like, no pueden contener order by o usar update/delete
SELECT ID_EMPLEADO,NOMBRE,APELLIDO,SUELDO
FROM EMPLEADOS WHERE SUELDO >=(SELECT AVG(sueldo)
FROM EMPLEADOS)
Clausula EXISTS, NOT EXISTS Buscar coincidencias en una subconsulta, any busca cualquier coincidencia,
pero EXISTS es mas específico.
NULOS
Funciones para el control de datos nulos, reemplazan su valor por algo mas.
ISNULL()
COALESCE()
CASE
20 / 53
SQL_Server.md 2024-10-02
Ejemplo:
SELECT nombre,cantidad,
CASE
WHEN cantidad > 30 then 'Articulo con sobre-existencia'
WHEN cantidad < 10 then 'Se debe realizar pedido'
ELSE 'Existencia normal'
END AS Inventario
FROM ARTICULOS;
Ejemplo: Generar un nombre con nombre, pais y ciudad de los clientes organizar el reporte por ciudad,
en caso de que el cliente no tenga ciudad, organizar por país.
SELECT nombre,pais,ciudad
FROM clientes
ORDER BY
(CASE
WHEN ciudad IS NULL THEN pais
ELSE ciudad);
Es decir se organiza por ciudad, pero si encuentra un nulo organiza por país hasta que encuentre una
ciudad nula. Se organiza dinamicamente.
FUNCIONES MATEMÁTICAS
Función PI( )
21 / 53
SQL_Server.md 2024-10-02
En números negativos elimina los decimales pero no redondea, los convierte en enteros.
Los decimales positivos solo le quita los decimales, es decir, los vuelve enteros. Los decimales negativos los
redondea al número mas negativo.
Función ROUND( )
SELECT ROUND(123.453,2),ROUND(123.5,0),ROUND(123.5,1);
Redondea y se le puede agregar los decimales que quiera aproximar, sin embargo no quita los decimales, en
el ejemplo anterior queda 123.450, con .5 hacia arriba aproxima al número más grande. Sino aproxima con
los decimales que se tiene deja el número como esta, es decir, ROUND(123.45,3) pasa a ser 123.45 ya que el
tercer decimal sería 0 en este caso.
SELECT POWER(4,2),POWER(8,3);--4^2,8^3
SELECT RAND(),RAND()*(100-1),RAND()*(1-100);
En este caso el segundo me da un valor entre 0 y 99. El tercero un valor de 0 y -99 (1-100)=-99.
Seed: La función RAND() se le puede agregar una semilla para que los datos permanezcan siempre
igual de la siguiente forma RAND(45), en este caso 45 sería la semilla y mientras este todos los valores
random no cambiaran aleatoriamente.
22 / 53
SQL_Server.md 2024-10-02
FUENTE>
23 / 53
SQL_Server.md 2024-10-02
FUNCIONES STRING
Función CHAR( ): Saber el valor de un carácter de acuerdo a una posición
SELECT LEN('SQLServer'),LEN(10);
24 / 53
SQL_Server.md 2024-10-02
SELECT TRANSLATE('abcdefb','abc','010');
Reemplaza letra por letra según el criterio puesto en este caso todas las a con 0. Todas las b con 1 y
todas las c con 0
Función REPLICATE( ): Replicar los caracteres/texto dentro de un campo con una cantidad determinada
SELECT REPLICATE('0',6),REPLICATE('Hola',3),REPLICATE(1,3);
25 / 53
SQL_Server.md 2024-10-02
Función STUFF( ): Eliminar cantidad de caracteres desde un punto especifico, lo reemplaza por un argumento
enviado.
TRANSACT-SQL:
Extensión de SQL, programación de SQL (T-SQL)
Función BULK INSERT: Permite carga eficiente de datos desde un archivo especifico externo a una tabla
BULK INSERT
AUTOS -- Tabla destino
FROM 'C:\Users\sebas\Downloads\TABLA_AUTOS.txt' -- Tabla fuente
WITH (FIRSTROW = 2); --Desde que fila arrancan los datos
CLAUSULA OVER( )
Se utiliza en combinación con funciones de agrupación. Cálculo de valores basados en funciones ya definidas.
PARTITION BY( )
Parámetro usado en funciones de agrupamiento para dividir el conjunto en particiones en una o mas
columnas
26 / 53
SQL_Server.md 2024-10-02
Función RANK( ) Función de ventana, agrupación que asigna un rango en c/fila de un connjunto de
resultados ordenados según una o mas columnas especificas. Antes de aplicar a función RANK(), los datos se
ordenan según las columnas especificadas en la cláusula ORDER BY La función RANK() asigna un rango a
c/fila basándose en el orden de los datos despues de la ordenación
select idempleado,nombre,puesto,iddepartamento,salario,
RANK() OVER(ORDER BY salario desc) AS 'Top Salarios'
from empleados;
select idempleado,nombre,puesto,iddepartamento,salario,
DENSE_RANK() OVER(ORDER BY salario desc) AS 'Top Salarios'
from empleados;
Le agrega una columna contador que va de acuerdo a la cantidad de ventas del ultimo año en orden
descendente
27 / 53
SQL_Server.md 2024-10-02
BLOQUES / INTRO
Contienen las siguientes secciones:
DECLARE
VARIABLE 1
28 / 53
SQL_Server.md 2024-10-02
VARIABLE 2
...
VARIABLE X
BEGIN
CODIGO PRINCIPAL
IF-ELSE
RETURN
WAITFOR
WHILE
CASE
CONTINUE
FOR
DO WHILE
CONTROL DE EVENTUALIDADES (SUBSECCION)
END
Ver asientos disponibles en cada sala, en caso de no haber asientos desplegar mensaje de entradas agotadas
29 / 53
SQL_Server.md 2024-10-02
@variable1
@cantidad_
declare
@id_valor int,
-- inicialización desde declare (opcional: declarar constantes)
@nombre varchar(20) = 'Hola',
@telefono numeric(10),
@fecha_nac date,
@activo bit;
begin
-- inicialización desde el begin
set @id_valor = 50;
select @id_valor,@nombre;
set @nombre = 'Chao';
set @telefono = 3108618222;
set @fecha_nac = '1999/12/30';
set @activo = 1; --puede set 'true','false',0,#>0
select @nombre,@telefono,@fecha_nac,@activo;
end;
Ejemplo:
-- Ejemplo:
declare
@codigo int = 10;
begin
select * from articulos
where codigo = @codigo;
end;
-- Ejemplo 2: usandolo dentro de un like
declare
@patron varchar(20);
begin
set @patron = '%Lap%';
select * from articulos
30 / 53
SQL_Server.md 2024-10-02
declare
@mayorprecio decimal(6,2);
begin
-- inicializo = max(precio)
select @mayorprecio = max(precio)
from articulos;
-- busco el registro con el precio = @mayorprecio = max(precio)
select * from articulos
where precio = @mayorprecio;
end;
Variables de tipo tabla No es necesario usar begin y end, sin embargo, no se almacena como un objeto
"tabla" sino como una variable de tipo tabla. Se deben hacer sus ejecuciones directamente en el declare
declare
@tabla1 table (
id int,
nombre varchar(20),
telefono numeric(10)
);
insert into @tabla1 values(1,'Juan',12312314);
select * from @tabla1;
-- Si ejecuto lo siguiente solo... No funcionaria porque ya no toma la variable
tipo tabla por tanto @tabla1 no existiría.
select * from @tabla1;
Ejemplo: Ver todos los articulos que tengan menos de 20 unidades de existencia
31 / 53
SQL_Server.md 2024-10-02
-- Ejecución
exec p_existencia
Una vez ejecutado lo podemos observar en el explorador de objetos de la base de datos en el apartado de
programmability / store procedures. Para ejecutar se usa lo siguiente:
Ejemplo 2:
-- Ejecución
EXEC p_actualiza_inventario;
Ejemplo 3:
32 / 53
SQL_Server.md 2024-10-02
-- Ejemplo 2
CREATE OR ALTER PROC P_BUSCA_EMPLE_2
@nombre varchar(30) = 'Ana',
@sueldo int = 900.00,
@hijos int = 1
as
select * from empleados
where nombre = @nombre and sueldo = @sueldo and cant_hijos = @hijos;
33 / 53
SQL_Server.md 2024-10-02
DECLARE
@PROMEDIO NUMERIC(6,2)
EXEC P_PROMEDIO 1234.20,6548.15,@promedio output -- le paso a promedio el
resultado
select @promedio as promedio; -- llamo a la var promedio
-- EJECUCION
DECLARE
@SUMATORIA NUMERIC(6,2),
@PROM NUMERIC(6,2)
EXEC P_EMPL_SAL_PROMEDIO 'Desarrollador',@sumatoria output,@prom output
SELECT @SUMATORIA AS TOTAL,@PROM AS PROMEDIO;
¿Comó podemos hacer que otros usuarios no puedan ver el contenido de un SP propio?
34 / 53
SQL_Server.md 2024-10-02
Para bloquear esta función necesitamos activar un parámetro de encriptación con la siguiente instrucción
with encryption. Encriptación
TABLAS TEMPORALES
Solo existen mientras tenga la sesión activa. Apenas cierre la sesion se eliminaran. Se le crea con un # antes
del nombre. No pueden tener foreign key, ni pueden indexarse sus campos, ni crear una vista de ellas.
35 / 53
SQL_Server.md 2024-10-02
Clasificación
Funciones deterministicas: retorna el mismo resultado si las generamos con el mismo parámetro de
entrada
No deterministicas: retorna distintos valores c/vez que son llamadas.
getdate, datename, rand
SP: tienen distintos valores, parámetros de entrada y salida.
Escalares: retorna un valor escalar Tabla de varias instrucciones: retorna tabla tabla en linea: retornan una tabla
Las podemos encontrar en Programmability/Functions/ depende del tipo, en este caso es scalar.
Ejecución
Ejemplo: Función de tabla que nos diga cuantos libros tenemos de cada autor
TRIGGERS
Proceso desencadenador. Proceso que se ejecuta cuando ocurre algun evento
AFTER INSERT
--TABLAS DE PRUEBA
CREATE TABLE PRUEBA(
37 / 53
SQL_Server.md 2024-10-02
id int null,
nombre varchar(10),
fecha date,
cantidad numeric(3,2)
);
AFTER UPDATE
AFTER DELETE
38 / 53
SQL_Server.md 2024-10-02
AFTER DELETE
AS
BEGIN
DECLARE @USUARIO VARCHAR(30);
SET @USUARIO = SUSER_NAME(); -- Obtengo usuario del sistema
INSERT INTO CONTROL VALUES(@USUARIO, GETDATE(),'Delete');
END;
-- Funcionamiento
DELETE FROM PRUEBA WHERE NOMBRE = 'El bicho';
-- Verificación
SELECT * FROM PRUEBA; -- Tabla insertada
SELECT * FROM CONTROL; -- Tabla insertada por trigger/disparador
-- Verificación
SELECT * FROM CONTROL_EMPLEADOS;
SELECT * FROM EMPLEADOS WHERE id_empleado = 41;
-- Funcionamiento
-- insert
INSERT INTO EMPLEADOS
VALUES(41,'Manuel','Gonzales','Direccion X1','Tecnico',700.00,1);
-- update
UPDATE EMPLEADOS SET NOMBRE = 'Pedro'
WHERE id_empleado = 41;
-- delete
DELETE FROM EMPLEADOS WHERE id_empleado = 41;
Triggers que tienen la función de ejecutarse antes de una insert, update y delete. Usado para crear eventos
preventivos a sucesos no deseables.
INSERT
-- Verificación
INSERT INTO PRODUCTOS VALUES (42,'Soldador eléctrico',80.20,4,0);
select * from productos where idproducto = 42;
select * from control_productos;
UPDATE
40 / 53
SQL_Server.md 2024-10-02
-- Verificación
SELECT * FROM PRODUCTOS;
UPDATE PRODUCTOS SET NOMBRE = 'Prueba' WHERE idproducto = 40;
select * from productos where idproducto = 40;
select * from control_productos;
DELETE
HABILITAR O INHABILITAR TRIGGERS Debes en cuando es deseable desactivar el trigger para efectuar una
operación, por lo cual podamos volvarlo activarlo despues del cambio. Para hacerlo lo podemos hacer
mediante el parámetro DISABLE TRIGGER con el nombre del trigger sobre la tabla que afecta el trigger.
-- DESABILITAR TRIGGER
ALTER TABLE PRODUCTOS -- tabla con el trigger
DISABLE TRIGGER TR_BLOCKDELETE_PRODUCTOS;
-- EJECUCIÓN
DELETE FROM PRODUCTOS WHERE idproducto = 1;
Deja borrar el producto. Si queremos volverlo a activar para evitar el borrado, usamos el parámetro ENABLE
TRIGGER con el nombre del trigger sobre la tabla que afecta el trigger.
TRIGGER RAISERROR Debes en cuando se desea enviar un mensaje personalizado, para tener presente con
mas detalle el motivo del error. Por lo cual podemos realizarlo con la función RAISERROR('motivo de
41 / 53
SQL_Server.md 2024-10-02
error...') junto con un ROLLBACK TRANSACTION haciendo que los acciones efectuadas en el trigger se
cancelen para tener congruencia.
-- VERIFICACIÓN
DELETE FROM EMPLEADOS WHERE id_empleado = 1;
-- Si deja borrar porque es solo 1 empleado
DELETE FROM EMPLEADOS WHERE id_empleado IN (5,6,7);
-- Se dispara 1 error por intento de borrar mas de 2 empleados.
-- update campo
CREATE OR ALTER TRIGGER TR_actualiza_EMPLEADOS
ON EMPLEADOS
FOR UPDATE
AS
IF UPDATE(SUELDO)
BEGIN
RAISERROR('No se puede ACTUALIZAR el SUELDO',16,1);
ROLLBACK TRANSACTION; -- Deshacer el intento de borrado.
END;
-- INSERT DATOS
CREATE OR ALTER TRIGGER TR_INSERT_EMPLEADOS
ON EMPLEADOS
FOR INSERT
AS
IF (SELECT PUESTO FROM inserted) = 'Gerente'
BEGIN
RAISERROR('No se puede insertar este puesto',16,1);
ROLLBACK TRANSACTION; -- Deshacer el intento de borrado.
END;
select * from empleados;
INSERT INTO EMPLEADOS
VALUES(41,'Pedro','Gonzales','calle 3','Gerente',1000.00,1);-- Salta error
42 / 53
SQL_Server.md 2024-10-02
BULK INSERT
Inserción masiva desde un archivo externo, pueden ser en formato xlsx, xls, csv, txt, xml.
43 / 53
SQL_Server.md 2024-10-02
Pueden usados en cursores: DECLARE nombre_cursor CURSOR FOR [instrucciones] OPEN CURSOR
[instrucciones] FETCH CURSOR [instrucciones] CLOSE CURSOR
While
DECLARE
@CONTEO INT = 0,
@tabla int = 2;
WHILE @CONTEO < 10
BEGIN
--PRINT 'Vuelta número: '+(CONVERT(VARCHAR, @CONTEO));
PRINT
str(@conteo)+') '+(convert(varchar,@tabla)+'*'+
convert(varchar,@conteo)+'='+convert(varchar,@tabla*@conteo));
SET @CONTEO += 1;
END;
While break
DECLARE
@CONTEO1 INT = 0,
@tabla2 int = 20;
WHILE @CONTEO1 <= 12
BEGIN
--PRINT 'Vuelta número: '+(CONVERT(VARCHAR, @CONTEO));
PRINT ('Valor vuelta: '+str(@conteo1));
SET @CONTEO1 += 1;
44 / 53
SQL_Server.md 2024-10-02
IF @CONTEO1 = 7 BREAK;
END;
PRINT 'El valor ya es: '+str(@CONTEO1);
While continue
DECLARE
@VALOR INT = 1;
WHILE @VALOR <= 10
BEGIN
PRINT 'Contando...';
SET @VALOR += 1;
IF @VALOR = 7
PRINT 'El valor ya es: '+str(@valor);
CONTINUE
END;
PRINT 'El valor ya es: '+str(@valor);
Loop anidado
DECLARE
@VALOR1 INT = 1,
@VALOR2 INT = 2;
WHILE @VALOR1 <= 4
BEGIN
PRINT CONCAT('Loop externo: =',@valor1);
WHILE @VALOR2 <= 8
BEGIN
PRINT CONCAT('Loop anidado =',@valor2);
SET @VALOR2+=2;
END;
SET @VALOR1+=1;
END;
45 / 53
SQL_Server.md 2024-10-02
-- Ejecución
EXEC PR_VER_PRODUCTOS;
Ejemplo
CURSORES
Recorrer filas y traer resultados de consultas de forma secuencial útiles para cálculos complicados y lógicas de
negocio: tipos:
1. solo lectura
2. actualización
3. inserción
4. combinación
declare
@descripcion numeric(6,2); --variable para los registros
declare --seccion para declarar cursor
prod_info cursor for
select precio_unidad from productos --guardo precio_unidad en prod_info
open prod_info -- abro el cursor
fetch next from prod_info into @descripcion --extracción y salta de reg en
reg.
while @@FETCH_STATUS = 0 --var global que mantiene el estado del ultimo
fetch
begin
print @descripcion --ve imprimiendo lo que va encontrando
fetch next from prod_info into @descripcion --siguiente prod_info
end
close prod_info --cierro cursor (optimizando)
deallocate prod_info --libero recursos asociados al cursor (optimizando)
46 / 53
SQL_Server.md 2024-10-02
47 / 53
SQL_Server.md 2024-10-02
Server roles los puedes encontrar en microsoft learn para que sirve cada uno.
Permisos para el usuarioEn este caso solo se dio el permiso de connect to sql
En el Object Explorer en los enchufes de X te desconectas y con el de la izquierda te conectas, seleccionas SQL
Server Authentication y pones las credenciales, en este caso puse la opción de cambiar contraseña al iniciar
sesion por primera vez y coloque una nueva contraseña (Olafo051799).
Le dimos permiso solo a la base de datos 'Principal' a la cual accede por defecto, pero las otras no. Esta
opción es 'User Mapping' al momento de crear el usuario. Tambien le asignamos el esquema creado
'PRUEBA2' ya que por defecto accede al dbo. Si trato de acceder a las otras bases de datos me salta error, y
no me permite la visualización de sus tablas. Solo me permite de 'Principal'.
Ejemplo: Al crear un script de SQL y crear una tabla se puede ver en el explorador de objetos que esta tiene
como esquema 'PRUEBA2', el cual fue asignado al momento de crear el usuario
Sin embargo tambien se puede asignar el esquema dbo (defecto) pero toca asignarlo manualmente al
momento de crear la tabla.create table dbo.pruebax(campo1 int not null);
El sistema permite conexión de varios usuarios en el mismo gestor de sql, solo dando clic en connect e inicias
sesión con el otro usuario estos apareceran abajo en el explorador de objetos como otro servidor donde
podras trabajar de manera simultanea con los dos usuarios.
USUARIO SCRIPT
48 / 53
SQL_Server.md 2024-10-02
-- Crear sesion
CREATE LOGIN usuario_Tsql with password = 'Contraseña1234#',
check_expiration = on, --expiración
check_policy = on; --politicas de clave
-- Crear usuario
CREATE USER usuario_Tsql for login Usuario_Tsql --asignandole el login
with default_schema = prueba2 --asignandole el esquema - permite uso de principal
DB
-- Para configurar los roles del usuario
GRANT SELECT ON SCHEMA :: dbo to usuario_Tsql;
-- permiso en todas las tablas del esquema dbo para consultas (SELECT)
GRANT CREATE TABLE TO usuario_Tsql as dbo;
-- creación de tablas en el esquema dbo.
GRANT INSERT, UPDATE, DELETE TO usuario_Tsql;
--GRANT INSERT, UPDATE, DELETE ON tablaX TO usuario_Tsql; para TABLA ESPECIFICA
-- insertar, actualizar y borrar al usuario
-- QUITAR ROLES AL USUARIO
REVOKE INSERT TO usuario_Tsql;
--REVOKE INSERT ON TABLAX TO usuario_Tsql; PARA UNA TABLA ESPECIFICA
JOBS - TRABAJOS
Unidad de trabajo automatica, ejecución de tareas a ciertos eventos y tiempos. Los jobs son una caracteristica
de SQL_server_agent: automatización de tareas administrativas y de mantenimiento de la base de datos. Los
jobs sirven para:
Buscar SQL Server 20XX Configuration Manager. En el activar SQL Server Agent (clic derecho y start) debe
aparecer como running > cerrar en el explorador de objetos en el servidor en el SQL Server Agent
nombre
owner
category En steps ponemos los pasos del job simulando una secuencia damos clic en new step y vamos
agregando los pasos que necesitemos. En este caso le puedes poner el tipo, nombre, db y comando. Lo
hicimos con tipo T-sql y ejecutamos un comando de inserción para el job de insertar datos en
tabla control. En schedules configuras cada tanto quieres que se ejecute, configurando la frecuencia
la hora y demas. El job lo podemos ver y editar en la carpeta de jobs del servidor. En el job activity
monitor podemos ver los jobs que estan trabajando
49 / 53
SQL_Server.md 2024-10-02
BACKUP - RESTAURACIÓN
1era forma: clic derecho en la DB> tasks > back up backup types:
Full: todo
diferential: solo backup de los cambios desde la ultima
transaction_log: todas las transacciones desde un punto de fecha especifico Luego tenemos DB o
[archivos o grupos de archivos (mas flexible)] Luego destino Disk o URL (Remoto)
En Media Options:
50 / 53
SQL_Server.md 2024-10-02
Server\MSSQL15.SQLSERVER\MSSQL\Backup\STAGE_UPTC.bak';
Menos configurable
WITH EmpleadosCTE AS (
SELECT IDEMPLEADO, NOMBRE, PUESTO, IDDEPARTAMENTO, SALARIO
FROM EMPLEADOS
)
SELECT * FROM EmpleadosCTE;
Ejemplos
51 / 53
SQL_Server.md 2024-10-02
select productos.nombre,
empaques.descripcion,
productos.precio * empaques.peso as Precio
from productos
cross join empaques
order by nombre;
ROLLBACK Y COMMIT
Rollback: deshacer una operación - transacción realizadas dentro de una ejecución.
Commit: confirmar y finalizar una transacción como exitosa.
begin transaction;: Instrucción de inicio de una transacción. se pueden realizar varias operaciones dentro
de la misma, que tome en cuenta todo lo que tenga adentro.
52 / 53
SQL_Server.md 2024-10-02
53 / 53