Muchas gracias a todos los que estuvieron en la charla!!! les dejo el ppt y los ejemplos y prometo en la semana subir algunas fotos ;)
Saludos y gracias!!!
https://sites.google.com/site/aaiello/CodeCamp_Que_No_Te_Ataquen.rar
-- =============================================
-- Author: Andrés Aiello
-- Create date: 02/05/2011
-- Setea el check_policy para los logins que no lo tengan
-- =============================================
DECLARE @SQLQuery varchar(1000)
DECLARE @LoginName varchar(255)
DECLARE cLogins CURSOR FORWARD_ONLY FOR
SELECT name
--,is_policy_checked,'ALTER LOGIN [' + name + '] WITH CHECK_POLICY=ON' Query
FROM sys.sql_logins
WHERE is_policy_checked = 0
/* Ignoro los logins que considere que por algun motivo no deben ser tenidos en cuenta */
AND NOT name IN ('xxxxxxxxxxx')
ORDER BY NAME
OPEN cLogins
FETCH NEXT FROM cLogins INTO @LoginName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQLQuery = 'ALTER LOGIN [' + @LoginName + '] WITH CHECK_POLICY=ON'
PRINT @SQLQuery
FETCH NEXT FROM cLogins INTO @LoginName
END
CLOSE cLogins
DEALLOCATE cLogins
EXEC sp_MSForeachdb 'SELECT ''?'' DBName, text FROM [?].SYS.SYSCOMMENTS WHERE text LIKE ''%XP_CMDSHELL%'''
SELECT name, physical_name AS CurrentLocation, state_desc
FROM sys.master_files
WHERE database_id = DB_ID('Libreria');
-- Pongo a la base offline ALTER DATABASE Libreria SET OFFLINE WITH ROLLBACK IMMEDIATE -- Cambio los nombres a donde apuntan. El NAME es el nombre logico que quiero modificar y el FILENAME es el NUEVO nombre fisico ALTER DATABASE Libreria MODIFY FILE (NAME = Libreria, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\LibreriaDATA.mdf' ) ALTER DATABASE Libreria MODIFY FILE (NAME = Libreria_log, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\LibreriaLOG.LDF' ) -- Muevo los archivos a nivel sistema operativoSi todo está ok pongo la base nuevamente en línea. Es importante que noten que puedo hacer el alter apuntando a un archivo inexistente, el control se hará al momento de poner la base online.
-- Una vez renombrados la pongo nuevamente en linea ALTER DATABASE Libreria SET ONLINE -- Controlo que todo quede como yo quería SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_filesSi todo está ok ya terminé mi trabajo. En caso de que haya por error apuntado a un archivo inexistente (ej. me faltó renombrar un archivo) la base no se pondrá online arrojando el siguiente error:
CREATE TABLE #Empleados(idEmpleado INT, Nombre VARCHAR(10), idJefe INT) INSERT INTO #Empleados SELECT 0, 'Bob', null UNION SELECT 1, 'Tom', 0 UNION SELECT 2, 'Joe', null UNION SELECT 3, 'John', 2 UNION SELECT 4, 'Ringo', 1 UNION SELECT 5, 'Paul', 4 SELECT * FROM #Empleados
SELECT e.Nombre Empleado, j.Nombre Jefe FROM #Empleados e INNER JOIN #Empleados j ON e.idJefe=j.idEmpleado;
WITH cte AS( -- Caso base SELECT e.idEmpleado, e.Nombre Nombre, e.idEmpleado Jefe FROM #Empleados e WHERE e.idJefe IS NULL -- Fin Caso base UNION ALL -- Caso recursivo SELECT e.idEmpleado, e.Nombre Nombre, j.Jefe FROM #Empleados e INNER JOIN cte j ON e.idJefe=j.idEmpleado -- Fin Caso recursivo ) SELECT c.Nombre Empleado, j.Nombre Jefe FROM cte c INNER JOIN #Empleados j ON c.Jefe=j.idEmpleado DROP TABLE #Empleados