Matar procesos de SQL Server para liberar una base de datos
Friday, 17 de October de 2008Pués necesitaba restaurar una copia de una base de datos de producción a un entorno de test y me daba errores de que no podía hacerlo por que la base de datos estaba en uso.
En la consola del administrador corporativo veo esos procesos, pero por más que le diga que los elimine, no hay manera, así que buscando un poco en google, he encontrado esto, que genera un cursor para matar todos los procesos de una base de datos en concreto.
CREATE TABLE #TmpWho (spid INT, ecid INT, status VARCHAR(150), loginame VARCHAR(150), hostname VARCHAR(150), blk INT, dbname VARCHAR(150), cmd VARCHAR(150)) INSERT INTO #TmpWho EXEC sp_who DECLARE @spid INT DECLARE @tString VARCHAR(15) DECLARE @getspid CURSOR SET @getspid = CURSOR FOR SELECT spid FROM #TmpWho WHERE dbname = 'mydb'OPEN @getspid FETCH NEXT FROM @getspid INTO @spid WHILE @@FETCH_STATUS = 0 BEGIN SET @tString = 'KILL ' + CAST(@spid AS VARCHAR(5)) EXEC(@tString) FETCH NEXT FROM @getspid INTO @spid END CLOSE @getspid DEALLOCATE @getspidDROP TABLE #TmpWho
Oli en un llum (aceite en una lámpara), vamos que funciona a las mil maravillas (al menos en un SQL Server 2000 con SP3).
La fuente (en inlgés) aquí.


