2013-08-14 41 views
7

Có cách nào mà tôi có thể tìm thấy nơi lưu các thủ tục được lưu trữ để tôi có thể sao chép các tệp vào máy tính để bàn của mình không?Làm thế nào để viết ra các thủ tục được lưu trữ cho các tệp?

+3

Bạn có nghĩa là tập lệnh của SP? – christiandev

+0

Chúng được lưu trữ trong cơ sở dữ liệu - chúng không có trong tệp của riêng chúng. –

+0

Sử dụng [Tạo thuật sĩ tập lệnh SQLServer] (http://technet.microsoft.com/en-us/library/ms186996 (v = sql.105) .aspx) trong SSMS để viết các thủ tục được lưu trữ. – AgentSQL

Trả lời

28

thủ tục lưu trữ không được lưu trữ dưới dạng file, chúng được lưu trữ như siêu dữ liệu và tiếp xúc với chúng tôi peons (nhờ Michael cho lời nhắc nhở về sysschobjs) trong khung nhìn danh mục sys.objects, sys.procedures, sys.sql_modules, vv Đối với một thủ tục được lưu trữ cá nhân , bạn có thể truy vấn định nghĩa trực tiếp bằng cách sử dụng các chế độ xem này (quan trọng nhất là sys.sql_modules.definition) hoặc sử dụng chức năng OBJECT_DEFINITION()Nicholas pointed out (mặc dù mô tả của mình là syscomments không hoàn toàn chính xác).

Để trích xuất tất cả các thủ tục được lưu trữ vào một tệp, một tùy chọn là mở Object Explorer, mở rộng your server > databases > your database > programmability và đánh dấu nút stored procedures. Sau đó, nhấn F7 (Xem>Object Explorer Details). Ở phía bên tay phải, chọn tất cả các quy trình bạn muốn, sau đó nhấp chuột phải, script stored procedure as > create to > file. Điều này sẽ tạo ra một tệp duy nhất với tất cả các quy trình bạn đã chọn. Nếu bạn muốn một tập tin duy nhất cho mỗi thủ tục, bạn có thể sử dụng phương pháp này bằng cách chỉ chọn một thủ tục tại một thời điểm, nhưng điều đó có thể là tẻ nhạt. Bạn cũng có thể sử dụng phương pháp này để viết tất cả các thủ tục liên quan đến kế toán cho một tệp, tất cả các thủ tục liên quan đến tài chính tới một tệp khác, v.v.

Cách dễ dàng hơn để tạo chính xác một tệp cho mỗi thủ tục được lưu trữ sẽ sử dụng Generate Scripts wizard - một lần nữa, bắt đầu từ Object Explorer - nhấp chuột phải vào cơ sở dữ liệu của bạn và chọn Tasks > Generate scripts. Chọn Select specific database objects và kiểm tra hộp Stored Procedures cấp cao nhất. Bấm tiếp. Để xuất, chọn Save scripts to a specific location, Save to fileSingle file per object.

Các bước này có thể hơi khác tùy thuộc vào phiên bản SSMS của bạn.

4

Quy trình lưu trữ không được "lưu trữ" dưới dạng tệp riêng biệt mà bạn tự do duyệt và đọc mà không có cơ sở dữ liệu. Nó được lưu trữ trong cơ sở dữ liệu nó thuộc về trong một tập các bảng hệ thống. Bảng có chứa định nghĩa được gọi là [sysschobjs] mà thậm chí không thể truy cập (trực tiếp) cho bất kỳ người dùng cuối nào của chúng tôi.

Để lấy lại định nghĩa của các thủ tục này được lưu trữ từ cơ sở dữ liệu, tôi muốn sử dụng truy vấn này:

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

Nhưng tôi thích câu trả lời của Aaron. Anh ấy đưa ra một số lựa chọn tốt đẹp khác.

1

Tùy thuộc vào phiên bản SQL Server bạn đang chạy. Đối với các phiên bản gần đây, mã nguồn cho các thủ tục lưu sẵn có sẵn thông qua khung nhìn hệ thống sys.sql_modules, nhưng cách đơn giản hơn để lấy nguồn cho thủ tục được lưu trữ hoặc hàm do người dùng định nghĩa (UDF) là sử dụng hàm hệ thống object_definition() (định nghĩa khung nhìn là sys.ssql_modules) sử dụng):

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

Trong phiên bản cũ, thủ tục lưu trữ và UDF đã có sẵn thông qua hệ thống Cảnh bây giờ bị phản đối sys.syscomments.

Và trong chưa phiên bản cũ của SQL Server, nó đã có sẵn thông qua hệ thống bảng 'dbo.syscomments'

Nó phải là notdd rằng tùy thuộc vào truy cập của bạn và làm thế nào các cơ sở dữ liệu đã được cấu hình, nguồn có thể không có sẵn cho bạn hoặc nó có thể được mã hóa, mà làm cho nó không hữu ích khủng khiếp.

Bạn cũng có thể lấy nguồn theo lập trình sử dụng SMO (Đối tượng quản lý máy chủ Sql). http://technet.microsoft.com/en-us/library/hh248032.aspx

+0

'syscomments' là hợp lệ vào năm 2000, nhưng nó không có sẵn dưới dạng' sys.syscomments' cho đến khi SQL Server 2005. 'sys.sql_modules' đã có sẵn từ SQL Server 2005, do đó không có khoảng cách giữa việc sử dụng' dbo.syscomments 'và chuyển sang' sys.sql_modules'. –

Các vấn đề liên quan