2008-09-23 32 views
7

Mọi thứ tôi đã đọc nói rằng khi thực hiện một thủ tục được lưu trữ được quản lý, nhấp chuột phải vào Visual Studio và chọn triển khai. Điều đó hoạt động tốt, nhưng nếu tôi muốn triển khai nó bên ngoài Visual Studio với một số địa điểm khác nhau thì sao? Tôi đã thử tạo ra các hội đồng với dll dự án được xây dựng trong SQL, và trong khi nó đã thêm lắp ráp, nó đã không tạo ra các thủ tục ra khỏi hội đồng. Có ai đã tìm ra cách để làm điều này trong SQL trực tiếp, mà không cần sử dụng Visual Studio?Làm cách nào để triển khai thủ tục được lưu trữ được quản lý mà không sử dụng Visual Studio?

Trả lời

6

Sao chép tệp DLL lắp ráp của bạn vào ổ đĩa cục bộ trên các máy chủ khác nhau của bạn. Sau đó đăng ký lắp ráp của bạn với cơ sở dữ liệu:

create assembly [YOUR_ASSEMBLY] 
from '(PATH_TO_DLL)' 

... sau đó bạn tạo một hàm tham khảo phương pháp nào thích hợp trong DLL:

create proc [YOUR_FUNCTION] 
as 
external name [YOUR_ASSEMBLY].[NAME_SPACE].[YOUR_METHOD] 

Hãy chắc chắn để sử dụng [dấu ngoặc, đặc biệt là xung quanh NAME_SPACE. Các không gian tên có thể có bất kỳ số dấu chấm nào trong chúng, nhưng các mã định danh SQL không thể, trừ khi các phần được thiết lập rõ ràng bằng các dấu ngoặc vuông. Đây là một nguồn của nhiều nhức đầu khi tôi lần đầu tiên sử dụng SQL CLR.

Để rõ ràng, [YOUR_ASSEMBLY] là tên bạn đã xác định trong SQL; [NAME_SPACE] là không gian tên .NET bên trong DLL nơi phương thức của bạn có thể được tìm thấy; và [YOUR_METHOD] chỉ đơn giản là tên của phương thức trong không gian tên đó.

+0

Tôi tìm thấy [this] (https://msdn.microsoft.com/en-us/library/ms254956 (v = vs.90) .aspx) là một tài nguyên hữu ích để thực hiện toàn bộ điều từ dòng lệnh – user2426679

2

Đối với thêm một số chi tiết/làm rõ để anwser @ kcrumley của trên:

[NAME_SPACE] là đầy đủ loại tên và không chỉ là không gian tên
- tức là nếu lớp học của bạn được gọi là StoredProcedures trong một không gian tên của My.Name.Space, bạn phải sử dụng [My.Name.Space.StoredProcedures] cho phần [NAME_SPACE].

Nếu các thủ tục được lưu trữ được quản lý của bạn nằm trong một lớp không có không gian tên được xác định, bạn chỉ cần sử dụng tên lớp trống (ví dụ: [StoredProcedures]).

Tôi cũng cố gắng tìm cách thêm thủ tục với đối số/tham số. Vì vậy, lấy mẫu cho bất kỳ ai khác đang cố gắng làm như vậy:

CREATE PROCEDURE [YOUR_FUNCTION] 
( 
    @parameter1 int, 
    @parameter2 nvarchar 
) 
WITH EXECUTE AS CALLER 
AS 
EXTERNAL NAME [YOUR_ASSEMBLY].[StoredProcedures].[YOUR_FUNCTION] 
Các vấn đề liên quan