Operaciones masivas
Imaginaos que os dicen que asigneis permisos a un usuario a 400 procedimientos almacenados o algo asi que hay en una base de datos
Pues con un script como este, podemos buscarnos la vida para automatizar la tarea
1: DECLARE @spName AS VARCHAR(150)
2: DECLARE @command AS NVARCHAR(400)
3: CREATE TABLE #TBLSUMMARY ( sentence varchar(400) );
4: DECLARE procs_cursor CURSOR FOR
5: Select name from sys.procedures
6: where [type] = ‘P’
7: and is_ms_shipped = 0
8: and name not like ’sp_%’
9: order by name
10: OPEN procs_cursor
11: FETCH NEXT FROM procs_cursor INTO @spName;
12: WHILE (@@FETCH_STATUS <> -1)
13: BEGIN
14: IF (@@FETCH_STATUS <> -2)
15: BEGIN
16:
17: – se pueden generar las instrucciones
18: INSERT INTO #TBLSUMMARY VALUES
19: ( ‘deny execute on ‘ + @spName +
20: ‘ to [USUARIO]’)
21:
22: – y tambien ya de paso ejecutarlas
23: SET @command = N‘deny execute on ‘ + @spName +
24: ‘ to [USUARIO]’;
25: PRINT @command
26: exec sp_executesql @command ;
27:
28: END;
29: FETCH NEXT FROM procs_cursor INTO @spName;
30: END;
31: CLOSE procs_cursor;
32: DEALLOCATE procs_cursor;
33:
34: SELECT * FROM #TBLSUMMARY;
35:
36: DROP TABLE #TBLSUMMARY;
37:
Mediante un cursor elegimos todos los procedimientos almacenados de usuario de una base de datos, y mediante las dos sentencias dentro del bucle while aprovechamos tanto para generar un script como para ejecutar las sentencias que vamos generando sobre la marcha.En este ejemplo estamos denegando permisos a un usuario concreto a ejecutar cualquier procedimiento almacenado de la base de datos.
Generamos las instrucciones de forma dinámica y las guardamos en la tabla temporal, para luego hacer un select de la misma y quedarnos con un script que podemos tener que pasar a la gente encargada de pasar a producción por ejemplo.
Aprovechamos igualmente, mediante sp_executesql, para ejecutar la sentencia, aunque también podriamos generar el script y correrlo igualmente.
Este script ademas lo podemos aprovechar para adaptarlo a multiples situaciones cambiando la Select del cursor y la operacion que hacemos dentro. No hay que olvidar que tal vez necesitemos redefinir la tabla temporal, según la tarea que vayamos a realizar.
code on!!!!