2010-03-16 1 views

risposta

28

Utilizzare sys.sql_modules perché definition è nvarchar(max) perché non troncerà il codice lungo.

In INFORMATION_SCHEMA.ROUTINES la colonna ROUTINE_DEFINITION è solo nvarchar(4000) quindi se si tenta di visualizzare il testo di una procedura lunga e si vedrà che è troncato.

Utilizzare questo per la ricerca di testo in qualsiasi procedimento, vista, funzione:

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 questo per visualizzare il testo di una determinata procedura, vista, funzione:

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

sys.sql_modules sembra quasi sconosciuto. è la vera soluzione sql05 +, piuttosto che infoschema e syscomments – devio

+0

@devio, è in BOL: http://msdn.microsoft.com/en-us/library/ms175081.aspx, quindi non sono sicuro del perché nessuno lo sa. Se vuoi la definizione completa, allora è la soluzione 'THE'. –

+0

perché hai usato la clausola DISTINCT, possono esserci più righe per qualsiasi oggetto? – Zia

0

Se si sta solo tentando di visualizzare il codice delle stored procedure, si entra nella cartella delle programmazioni all'interno del DB e dovrebbero essere tutte memorizzate in tale archivio in base alle stored procedure.

+0

Non è un modo semplice per cercare i contenuti però. –

1

Se si utilizza SQL Server Management Studion, è possibile fare clic con il pulsante destro del mouse sul database desiderato, quindi fare clic su "Attività -> Genera script".

È possibile generare uno script con tutti gli SP in un singolo file, file separati o direttamente in una finestra di query e cercare/modificare ciò che si desidera.

Spero che questo aiuti.

(questo è per SQL Server 2008, ma penso che il 2005 è questa funzionalità anche)

EDIT:

si può anche vedere un singolo codice SP, seguendo questo percorso "YourDB -> programmabilità - > Stored procedure ", quindi fare clic con il pulsante destro del mouse sull'SP che si desidera vedere e fare clic su" Modifica "e viene aperta una finestra di query con il codice.

4

E 'conservato all'interno delle tabelle dello schema di sistema:

SELECT * FROM INFORMATION_SCHEMA.ROUTINES 

See MSDN sulla INFORMATION_SCHEMA.ROUTINES vista:

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

Per una ricerca i contenuti di questo, si può fare il follwing:

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

in INFORMATION_SCHEMA.ROUTINES ROUTINE_DEFINITION è solo nvarchar (4000) quindi prova a visualizzare il testo di una lunga procedura e vedrai che viene troncato. Vedi la mia risposta su come ottenere il codice completo delle procedure lunghe. –

1

Se si sta cercando di cercare riferimenti ad altri oggetti, è possibile eseguire un quer y come questo:

SELECT * FROM syscomments in cui il testo LIKE '% searchstring%'

Ciò restituirà tutti gli oggetti nel database che fanno riferimento alla stringa di ricerca. È quindi possibile guardare questi oggetti per vedere quali stored procedure (e viste e funzioni) lo fanno.

+2

syscomments.text è nvarchar (4000) e di conseguenza troncerà tutto ciò che è più lungo. Vedere la mia risposta per una vista di sistema che utilizza una colonna nvarchar (max) e, di conseguenza, non troncherà –

+0

in realtà non tronca, crea semplicemente più righe per tutte le procedure che diventano troppo lunghe. È decisamente più difficile da usare se hai memorizzato procedure così lunghe e la vista che hai fatto riferimento è sicuramente una soluzione migliore. Ovviamente, se crei procedure individuali lunghe più di 4000 caratteri, forse meriti di essere costretto a fare cose che sono più difficili :) –

1

Vista Dipendenze

In SQL Server Management Studio, fare clic destro su un tavolo, e scegliere "Visualizza Dipendenze". Vedrete ogni oggetto che fa riferimento alla tabella

INFORMATION_SCHEMA

Il codice effettivo per una stored proc, vista, vincolo, ecc viene memorizzato in SysComments. È necessario eseguire una query utilizzando le visualizzazioni fornite nello schema Information_Schema. Ecco tutti i componenti di Information_Schema.

3

È possibile utilizzare

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

o

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

o anche

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

Queste versioni sono mai troncati.