Tengo un servidor de enlaces que cambiará. Algunos procedimientos llaman el servidor vinculado como esto: [10.10.100.50].dbo.SPROCEDURE_EXAMPLE
. Tenemos disparadores que también hacen este tipo de trabajo. Necesitamos encontrar todos los lugares que usa [10.10.100.50]
para cambiarlo.
En SQL Server Management Studio Express, no encontré una función como "buscar en toda la base de datos" en Visual Studio. ¿Puede un sys-select especial ayudarme a encontrar lo que necesito?
sql-server
stored-procedures
triggers
linked-server
Victor Rodrigues
fuente
fuente
type = 'C'
)?Puedes encontrarlo como
Enumerará distintos nombres de procedimientos almacenados que contienen texto como 'Usuario' dentro del procedimiento almacenado. Más información
fuente
syscomments
tabla almacena los valores en fragmentos de 8000 caracteres, por lo que si tiene la mala suerte de dividir el texto que está buscando en uno de estos límites, no lo encontrará con este método.[Respuesta tardía pero con suerte útil]
El uso de tablas del sistema no siempre proporciona resultados 100% correctos porque puede existir la posibilidad de que algunos procedimientos almacenados y / o vistas estén encriptados, en cuyo caso deberá usar la conexión DAC para obtener los datos que necesita.
Recomiendo usar una herramienta de terceros, como ApexSQL Search, que puede manejar objetos cifrados fácilmente.
La tabla del sistema Syscomments dará un valor nulo para la columna de texto en caso de que el objeto esté encriptado.
fuente
fuente
Esto funcionará para usted:
fuente
type = 'C'
)?Hay soluciones mucho mejores que modificar el texto de sus procedimientos almacenados, funciones y vistas cada vez que cambia el servidor vinculado. Aquí hay algunas opciones:
Actualiza el servidor vinculado. En lugar de utilizar un servidor vinculado llamado con su dirección IP, crear un nuevo servidor vinculado con el nombre del recurso, tales como
Finance
oDataLinkProd
, o algo así. Luego, cuando necesite cambiar a qué servidor se llega, actualice el servidor vinculado para que apunte al nuevo servidor (o suéltelo y vuelva a crearlo).Aunque desafortunadamente no puede crear sinónimos para servidores o esquemas vinculados, PUEDE crear sinónimos para objetos ubicados en servidores vinculados. Por ejemplo, su procedimiento
[10.10.100.50].dbo.SPROCEDURE_EXAMPLE
podría tener un alias. Quizás cree un esquemadatalinkprod
, entoncesCREATE SYNONYM datalinkprod.dbo_SPROCEDURE_EXAMPLE FOR [10.10.100.50].dbo.SPROCEDURE_EXAMPLE;
. Luego, escriba un procedimiento almacenado que acepte un nombre de servidor vinculado, que consulta todos los objetos potenciales de la base de datos remota y (re) crea sinónimos para ellos. Todos sus SP y funciones se reescriben solo una vez para usar los nombres de sinónimos que comienzan condatalinkprod
, y después de eso, para cambiar de un servidor vinculado a otro, simplemente lo haceEXEC dbo.SwitchLinkedServer '[10.10.100.51]';
y en una fracción de segundo está usando un servidor vinculado diferente.Puede haber incluso más opciones. Recomiendo usar las técnicas superiores de preprocesamiento, configuración o indirección en lugar de cambiar los guiones escritos por humanos. La actualización automática de los scripts creados por la máquina está bien, esto es preprocesamiento. Hacer cosas manualmente es horrible.
fuente
fuente
Este lo probé en SQL2008, que puede buscar desde todos los db de una vez.
fuente
Yo uso este para el trabajo. dejar fuera de [] 's aunque en el campo @TEXT, parece querer devolver todo ...
fuente
He usado estos en el pasado:
En este caso particular, donde necesita reemplazar una cadena específica en los procedimientos almacenados, el primer enlace probablemente sea más relevante.
Un poco fuera de tema, el complemento Búsqueda rápida también es útil para buscar nombres de objetos con SQL Server Management Studio. Hay una versión modificada disponible con algunas mejoras, y otra versión más nueva también disponible en Codeplex con algunos otros complementos útiles también.
fuente
Cualquier búsqueda con la instrucción select le proporciona solo el nombre del objeto, donde contiene la palabra clave de búsqueda. La manera más fácil y eficiente es obtener el script del procedimiento / función y luego buscar en el archivo de texto generado, también sigo esta técnica :) Así que eres exacto.
fuente
fuente
Acabo de escribir esto para la referencia cruzada externa genérica completa
fuente
Puede buscar dentro de las definiciones de todos los objetos de la base de datos utilizando el siguiente SQL:
fuente