2013-08-14 11 views
7

Czy istnieje sposób, w jaki mogę znaleźć miejsce zapisywania procedur składowanych, aby po prostu skopiować pliki na mój pulpit?W jaki sposób skryptować procedury przechowywane w plikach?

+3

Masz na myśli skrypt SP? – christiandev

+0

Są przechowywane w bazie danych - nie znajdują się w ich własnych plikach. –

+0

Użyj [Generate SQLServer Scripts Wizard] (http://technet.microsoft.com/en-us/library/ms186996 (v = sql.105) .aspx) w SSMS, aby wykonać skrypty procedur składowanych. – AgentSQL

Odpowiedz

28

Przechowywane procedury nie są przechowywane jako pliki, są one przechowywane jako metadane i wystawia nam peons (dzięki Michael za przypomnienie o sysschobjs) w widokach katalogu sys.objects, sys.procedures, sys.sql_modules itp dla procedury przechowywane indywidualnej , możesz zapytać o definicję bezpośrednio, korzystając z tych widoków (co najważniejsze: sys.sql_modules.definition) lub używając funkcji OBJECT_DEFINITION() jako Nicholas pointed out (chociaż jego opis syscomments nie jest całkowicie dokładny).

Aby wyodrębnić wszystkie zapisane procedury do pojedynczego pliku, jedną z opcji będzie otwarcie Eksploratora obiektów, rozwinięcie your server > databases > your database > programmability i zaznaczenie węzła stored procedures. Następnie naciśnij F7 (Widok>Object Explorer Details). Po prawej stronie wybierz wszystkie żądane procedury, a następnie kliknij prawym przyciskiem myszy, script stored procedure as > create to > file. Spowoduje to utworzenie jednego pliku ze wszystkimi wybranymi procedurami. Jeśli chcesz mieć pojedynczy plik dla każdej procedury, możesz użyć tej metody, wybierając tylko jedną procedurę na raz, ale może to być uciążliwe. Można również użyć tej metody do skryptowania wszystkich procedur związanych z rachunkowością do jednego pliku, wszystkich procedur związanych z finansami do innego pliku itp.

Łatwiejszym sposobem wygenerowania dokładnie jednego pliku na procedurę składowaną byłoby użycie Generate Scripts wizard - ponownie, zaczynając od Eksploratora obiektów - kliknij prawym przyciskiem myszy twoją bazę danych i wybierz: Tasks > Generate scripts. Wybierz opcję Select specific database objects i zaznacz pole najwyższego poziomu Stored Procedures. Kliknij Następny. Na wyjściu wybrać Save scripts to a specific location, Save to file i Single file per object.

Te kroki mogą się nieznacznie różnić w zależności od używanej wersji SSMS.

4

Procedury przechowywane nie są "przechowywane" jako osobny plik, który można przeglądać i czytać bez bazy danych. Jest przechowywany w bazie danych, do której należy, w zestawie tabel systemowych. Tabela zawierająca definicję nosi nazwę [sysschobjs], która nie jest nawet dostępna (bezpośrednio) dla użytkowników końcowych.

Aby pobrać definicję tych procedur składowanych z bazy danych, chciałbym skorzystać z tej kwerendy:

select definition from sys.sql_modules 
where object_id = object_id('sp_myprocedure') 

Ale lubię odpowiedź Aarona. Daje inne fajne opcje.

1

To zależy od wersji programu SQL Server, z którego korzystasz. W przypadku najnowszych wersji kod źródłowy procedur przechowywanych jest dostępny w widoku systemowym sys.sql_modules, ale prostszym sposobem uzyskania źródła dla procedury składowanej lub funkcji zdefiniowanej przez użytkownika (UDF) jest użycie funkcji systemowej object_definition() (której definicja widoku to sys.ssql_modules wykorzystuje):

select object_definition(object_id('dbo.my_stored_procedure_or_user_defined_function')) 

W starszych wersjach, procedury przechowywane i UDF była dostępna za pośrednictwem teraz już nieaktualnych widok System widzenia sys.syscomments.

aw jeszcze starszych wersjach SQL Server, było dostępne w tabeli systemowej `dbo.syscomments'

Należy notdd że w zależności od dostępności i jak baza danych jest skonfigurowany, źródło może nie być dostępne dla ciebie lub może być zaszyfrowane, co czyni go niezbyt użytecznym.

Źródło można również uzyskać programowo przy użyciu SMO (Sql Server Management Objects). http://technet.microsoft.com/en-us/library/hh248032.aspx

+0

'syscomments' był ważny w 2000 roku, ale nie był dostępny jako' sys.syscomments' aż do SQL Server 2005. 'sys.sql_modules' był dostępny od SQL Server 2005, więc nie było luki między używaniem' dbo.syscomments 'i przełączenie na' sys.sql_modules'. –

Powiązane problemy