2013-03-20 7 views
11

Versione: SQLServer 8Come visualizzare una funzione memorizzata - SQL Server

vorrei visualizzare il contenuto di una funzione memorizzata in sqlserver, vale a dire che cosa esattamente la funzione sta facendo.

Nessuna delle opzioni elencate here funziona per me. Non sembra esserci alcun database/tabella chiamato sys.objects. Sono stato in grado di interrogare la tabella information_table.routines, ma questo non contiene la funzione che sto cercando. La mia funzione si trova in:

DBName.dbo.functionName

Come posso visualizzare i contenuti di questa funzione?

+0

Perché non usi Management Studio o vuoi controllare la query? – Rolice

+1

@Rolice Voglio verificare con una query perché sono su Linux e nessuna delle soluzioni che ho trovato mi consente di visualizzare direttamente la funzione. – etech

risposta

18

È possibile utilizzare il comando sp_helptext per visualizzare la definizione. Lo fa semplicemente

Visualizza la definizione di una regola definita dall'utente, predefiniti, in chiaro Transact-SQL stored procedure, una funzione Transact-SQL definita dall'utente, trigger colonna calcolata, VERIFICA vincolo, immagine, o oggetto simile sistema come una stored procedure di sistema.

E.g;

EXEC sp_helptext 'StoredProcedureName'

EDIT: Se il databases o server sono diversi, allora si può fare specificando loro pure

EXEC [ServerName].[DatabaseName].dbo.sp_helptext 'storedProcedureName' 
+0

Come posso eseguire questo quando il database corrente è diverso dal database di destinazione? Quando sono connesso al database predefinito ed eseguo il comando sopra riportato, viene visualizzato: 'Codice errore 15250, stato SQL S0001: il componente nome database del qualificatore oggetto deve essere il nome del database corrente. Funziona solo quando attualmente collegato a DBName: 'EXEC sp_helptext 'DBName.dbo.functionName'' – etech

+0

prova questo' EXEC [NomeServer]. [NomeDatabase] .dbo.sp_HelpText' storedProcName' – Sachin

+0

Ha funzionato! Non avevo bisogno della parte del nome del server, però. 'EXEC [DatabaseName] .dbo.sp_helptext '[functionName]' ' – etech

5
select definition 
from sys.sql_modules 
where object_name(object_id) like 'functionName' 
+0

puoi usare' like '% routineName%' 'o' = 'routineName'' –

+0

Nota che questa tabella non memorizza tutti i tipi di funzioni. Secondo il documento (https://msdn.microsoft.com/en-us/library/ms175081.aspx), include sproc, procedure di filtro di replica, viste, trigger DML SQL, funzioni scalari, TVF e regole. Ciò esclude tutte le funzioni CLR, i trigger CLR, i vincoli e le stored procedure estese. –

+0

Ah grazie mille! Questo ha funzionato per le funzioni (non solo per le stored procedure) e mi ha completamente salvato. <3 – Ryanman

2
--ShowStoredProcedures 
select p.[type] 
     ,p.[name] 
     ,c.[definition] 
    from sys.objects p 
    join sys.sql_modules c 
    on p.object_id = c.object_id 
where p.[type] = 'P' 
    --and c.[definition] like '%foo%' 
ORDER BY p.[name] 
___________ 

SELECT OBJECT_NAME(object_id) ProcedureName, 
     definition 
FROM sys.sql_modules 
WHERE objectproperty(object_id,'IsProcedure') = 1 
ORDER BY OBJECT_NAME(object_id) 
+0

questo è molto meglio della migliore risposta – LearnByReading

0

Sì, sta lavorando bene.

Per visualizzare le stored procedure ... SELECT * FROM sys.procedures;

e ottenere il nome del procduere e utilizzare la query di seguito per lo stesso (sto usando SQuirreL SQL Client versione 3.2.0-RC1).

EXEC sp_helptext 'StoredProcedureName'.

0

Io invece uso INFORMATION_SCHEMA.ROUTINES:

select ROUTINE_NAME, ROUTINE_DEFINITION, LAST_ALTERED 
from INFORMATION_SCHEMA.ROUTINES where SPECIFIC_NAME = 'usp_mysp' 

basta copiare la colonna ROUTINE_DEFINITION ad una nuova finestra per vedere l'intero contenuto.