Tengo un SQL estándar que ejecuto en varias bases de datos en un solo servidor para ayudarme a diagnosticar problemas:
select
so.name,
so.type,
MAX(case when sc.text like '%remote%' then '' ELSE 'N' END) AS Relevant,
@@ServerName as Server,
DB_Name() as DBName
from
sysobjects so with (nolock)
join syscomments sc with (nolock) on so.id = sc.id
where (sc.text like '%emote%')
group by so.name, so.type
order by so.type, so.name
¿Cómo puedo ejecutar esto en todas las bases de datos en un solo servidor? (además de conectarse manualmente a uno a la vez y ejecutar)
sql-server
Andrew Bickerton
fuente
fuente
Respuestas:
sp_MSForEachDB
Una opción es sp_MSForEachDB . Es indocumentado pero útil de todos modos
Una búsqueda en las interwebs también tiene muchos más ejemplos.
Nota: Al ser una función no compatible (que tiene algunos errores conocidos), es posible que desee escribir su propia versión (gracias @Pradeep)
El ejemplo de SQL anterior necesitaría ser reestructurado como:
NOTAS
fuente
, ''?'' AS DBName
a cualquier instrucción select. Según mi ejemploSolo mis $ 0.05: SQL Multi Script (ejecución de múltiples scripts contra múltiples servidores SQL).
fuente
SSMS Tools Pack lo hace muy bien y es gratuito para los servidores de bases de datos anteriores a 2012. La función: "Ejecutar en múltiples objetivos" - http://www.ssmstoolspack.com/Features?f=6
fuente
Hay un método adicional que dará salida en un único conjunto de resultados semi-fusionado. Primero abra Servidores registrados y cree un nuevo grupo en Grupos de servidores locales, luego registre su servidor una vez para cada base de datos, en cada caso establezca la base de datos predeterminada en la deseada.
Una vez completado, haga clic derecho en su grupo y seleccione Nueva consulta. La ventana de consulta que se abre tendrá "múltiples" donde normalmente vería un nombre de servidor en la barra de estado. Cualquier consulta que se ejecute en esta ventana funcionará en cada servidor registrado que estaba en el grupo. La primera columna de los resultados será el nombre del servidor registrado. El conjunto de resultados estará fragmentado por esa primera columna y el orden por testamentos solo operará dentro de ese fragmento.
Una funcionalidad muy poderosa pero pasada por alto para cuando rutinariamente tienes que ejecutar el mismo SQL en múltiples servidores.
fuente
Mi empresa ha desarrollado una herramienta llamada xSQL Script Executor . Es gratuito para uso personal y, para mí, ha facilitado la implementación de scripts en múltiples objetivos.
fuente
Desarrollé esta herramienta: https://github.com/andreujuanc/TakoDeploy
Todavía estoy escribiendo algunas líneas, pero es bastante estable por ahora. Lo he usado contra bases de datos de producción y funciona de maravilla.
fuente