2010-03-16 11 views

Respuesta

28

Use sys.sql_modules porque definition es nvarchar(max) porque no truncará el código largo.

En INFORMATION_SCHEMA.ROUTINES la columna ROUTINE_DEFINITION es solo nvarchar(4000) por lo que si intenta ver el texto de un procedimiento largo y verá que está truncado.

Utilice esta opción para buscar un texto en cualquier procedimiento, la vista, la función:

SELECT DISTINCT 
    o.name AS Object_Name,o.type_desc 
    FROM sys.sql_modules  m 
     INNER JOIN sys.objects o ON m.object_id=o.object_id 
    WHERE m.definition Like '%'[email protected]+'%' 
    ORDER BY 2,1 

uso esta opción para ver el texto de un procedimiento, vista, función dada:

select * from sys.sql_modules where object_id=object_id('YourProcedure') 
+1

sys.sql_modules parece ser casi desconocido. es la verdadera solución sql05 +, en lugar de infoschema y syscomments – devio

+0

@devio, está en BOL: http://msdn.microsoft.com/en-us/library/ms175081.aspx, así que no estoy seguro de por qué nadie lo sabe Si quieres la definición completa, entonces es 'LA' solución. –

+0

por qué usó la cláusula DISTINCT, ¿puede haber varias filas para cualquier objeto? – Zia

0

Si solo está tratando de ver el código de procedimientos almacenados vaya a la carpeta de progammabiltity dentro de su base de datos y todos deben estar almacenados allí bajo procedimientos almacenados.

+0

No es una manera fácil de buscar los contenidos. –

1

Si utiliza SQL Server Management Studion, puede hacer clic con el botón derecho en la base de datos que desea, luego hacer clic en "Tareas -> Generar scripts".

Allí puede generar una secuencia de comandos con todos los SP en un solo archivo, archivos separados, o directamente a una ventana de búsqueda, y buscar/cambiar lo que desee.

Espero que esto ayude.

(esto es para SQL Server 2008, pero creo que 2005 tiene esta funcionalidad también)

EDIT:

también se puede ver un código SP sola, siguiendo este camino "basedatos -> Programación - > Procedimientos almacenados ", luego haga clic derecho en el SP que desea ver, y haga clic en" Modificar ", y se abre una ventana de consulta con el código.

4

Se almacena dentro de las tablas del esquema del sistema:

SELECT * FROM INFORMATION_SCHEMA.ROUTINES 

Ver MSDN acerca de la INFORMATION_SCHEMA.ROUTINES vista:

ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.en/s10de_6tsql/html/c75561b2-c9a1-48a1-9afa-a5896b6454cf.htm 

Para una búsqueda de contenido en este, puede hacer lo siguientes aparatos:

SELECT * FROM INFORMATION_SCHEMA.ROUTINES 
WHERE ROUTINE_DEFINITION LIKE '%search_string%' 
+2

en INFORMATION_SCHEMA.ROUTINES ROUTINE_DEFINITION es solo nvarchar (4000) así que intente ver el texto de un procedimiento largo y verá que está truncado. Vea mi respuesta sobre cómo obtener el código completo de procedimientos largos. –

1

Si está intentando buscar referencias a otros objetos, puede ejecutar un quer Y como esto:

SELECT * DE syscomments DONDE texto como '% searchstring%'

Esto devolverá todos los objetos en la base de datos que hacen referencia a la cadena de búsqueda. Luego puede ver estos objetos para ver qué procedimientos almacenados (y vistas y funciones) están haciendo.

+2

syscomments.text es nvarchar (4000) y, como resultado, truncará todo lo que sea más largo. Vea mi respuesta para una vista del sistema que utiliza una columna nvarchar (max) y, como resultado, no truncará –

+0

en realidad no se trunca, simplemente crea múltiples filas para cualquier procedimiento que sea demasiado largo. Definitivamente es más difícil de usar si tiene procedimientos almacenados que duran tanto tiempo, y la vista a la que hizo referencia es definitivamente una mejor solución. Por supuesto, si está creando procedimientos individuales de más de 4000 caracteres, tal vez merezca verse obligado a hacer cosas que son más difíciles :) –

1

ver las dependencias

En SQL Server Management Studio, haga clic en una mesa, y elegir la opción "Ver Dependencias". Verá cada objeto que hace referencia a la tabla

INFORMATION_SCHEMA

El código real para un proc almacenado, vista, restricción, etc se almacena en SysComments. Debe consultar esto utilizando las vistas proporcionadas en el esquema Information_Schema. Aquí están todos los componentes del Information_Schema.

3

Usted puede utilizar

select object_definition(object_id(routine_name)) from information_schema.routines 

o

select object_definition(object_id) from sys.objects where name = 'foo' 

o incluso

select object_definition(object_id('foo')); -- 'foo' is the table name 

Estas versiones nunca son truncados.

Cuestiones relacionadas