una tablas script para hacer error datos crear como codigo agregar adjuntar database tsql sql-drop

database - tablas - error al adjuntar base de datos sql server 2016



Cómo soltar múltiples bases de datos en SQL Server (2)

Solo para aclarar, esto no es realmente una pregunta, más ayuda para personas como yo que buscaban una respuesta.
Muchas aplicaciones crean tablas temporales y similares, pero me sorprendió cuando Team Foundation Server creó más de 80 bases de datos en mi prueba SQL Server. TFS no se instaló correctamente, y amablemente me dejó para aclararlo después. Ya que cada base de datos tenía una convención de nomenclatura, en lugar de eliminar cada base de datos a mano, recordé cómo usar los cursores y escribí lo que veo como la pieza más imprudente de T-SQL:

CREATE TABLE #databaseNames (name varchar(100) NOT NULL, db_size varchar(50), owner varchar(50), dbid int, created date, status text, compatibility_level int); INSERT #databaseNames exec sp_helpdb; DECLARE dropCur CURSOR FOR SELECT name FROM #databaseNames WHERE name like ''_database_name_%''; OPEN dropCur; DECLARE @dbName nvarchar(100); FETCH NEXT FROM dropCur INTO @dbName; DECLARE @statement nvarchar(200); WHILE @@FETCH_STATUS = 0 BEGIN SET @statement = ''DROP DATABASE '' + @dbName; EXEC sp_executesql @statement; FETCH NEXT FROM dropCur INTO @dbName; END CLOSE dropCur; DEALLOCATE dropCur; DROP TABLE #databaseNames;

No hace falta decir que el uso de cursores como este es probablemente muy peligroso, y se debe utilizar con extrema precaución. Esto me funcionó, y aún no he visto ningún daño adicional en mi base de datos, pero rechazo: ¡utilice este código bajo su propio riesgo y haga una copia de seguridad de sus datos vitales primero!
Además, si esto debería eliminarse porque no es una pregunta, entiendo. Solo quería publicar esto en algún lugar donde la gente mirara.


¿Por qué no hacer esto?

USE master; Go SELECT ''DROP DATABASE ''+ name FROM sys.databases WHERE name like ''_database_name_%''; GO

Capture la salida de ese conjunto de resultados y luego péguelo en otra ventana de consulta. Entonces ejecuta eso. ¿Por qué escribir todo este código de cursor TSQL?

"Cuando tienes un martillo, ¡todo parece un clavo!" ..


esto es facil...

use master go declare @dbnames nvarchar(max) declare @statement nvarchar(max) set @dbnames = '''' set @statement = '''' select @dbnames = @dbnames + '',['' + name + '']'' from sys.databases where name like ''name.of.db%'' if len(@dbnames) = 0 begin print ''no databases to drop'' end else begin set @statement = ''drop database '' + substring(@dbnames, 2, len(@dbnames)) print @statement exec sp_executesql @statement end