Tôi đang làm việc với quy trình lưu trữ CLR bằng cách sử dụng VS2010. Tôi cần tạo kịch bản triển khai độc lập để cài đặt thủ tục này tại các máy chủ của khách hàng. Bây giờ tôi đang sử dụng Visual Studio mà tạo ra kịch bản như vậy khi tôi nhấn F5 và cố gắng gỡ lỗi SP trên máy chủ DB. Tập lệnh này được đặt tại bin\Debug\MyStoredProcedure.sql
tệp. Có vẻ như sau:Cách tạo tập lệnh cài đặt thủ tục lưu trữ SQL CLR w/o Visual Studio
USE [$(DatabaseName)]
GO
IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE id=OBJECT_ID('tempdb..#tmpErrors')) DROP TABLE #tmpErrors
GO
CREATE TABLE #tmpErrors (Error int)
GO
SET XACT_ABORT ON
GO
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
GO
BEGIN TRANSACTION
GO
PRINT N'Dropping [dbo].[spMyStoredProcedure]...';
GO
DROP PROCEDURE [dbo].[spMyStoredProcedure];
GO
IF @@ERROR <> 0
AND @@TRANCOUNT > 0
BEGIN
ROLLBACK;
END
IF @@TRANCOUNT = 0
BEGIN
INSERT INTO #tmpErrors (Error)
VALUES (1);
BEGIN TRANSACTION;
END
GO
PRINT N'Dropping [MyStoredProcedure]...';
GO
DROP ASSEMBLY [MyStoredProcedure];
GO
IF @@ERROR <> 0
AND @@TRANCOUNT > 0
BEGIN
ROLLBACK;
END
IF @@TRANCOUNT = 0
BEGIN
INSERT INTO #tmpErrors (Error)
VALUES (1);
BEGIN TRANSACTION;
END
GO
PRINT N'Creating [MyStoredProcedure]...';
GO
CREATE ASSEMBLY [MyStoredProcedure]
AUTHORIZATION [dbo]
-- here should be long hex string with assembly binary
FROM 0x4D5A90000300000004000000FFFCD21546869732070726F6772616D...000000000000000000
WITH PERMISSION_SET = SAFE;
GO
IF @@ERROR <> 0
AND @@TRANCOUNT > 0
BEGIN
ROLLBACK;
END
IF @@TRANCOUNT = 0
BEGIN
INSERT INTO #tmpErrors (Error)
VALUES (1);
BEGIN TRANSACTION;
END
GO
PRINT N'Creating [dbo].[spMyStoredProcedure]...';
GO
CREATE PROCEDURE [dbo].[spMyStoredProcedure]
@reference UNIQUEIDENTIFIER, @results INT OUTPUT, @errormessage NVARCHAR (4000) OUTPUT
AS EXTERNAL NAME [MyStoredProcedure].[MyCompany.MyProduct.MyStoredProcedureClass].[MyStoredProcedureMethod]
GO
IF @@ERROR <> 0
AND @@TRANCOUNT > 0
BEGIN
ROLLBACK;
END
IF @@TRANCOUNT = 0
BEGIN
INSERT INTO #tmpErrors (Error)
VALUES (1);
BEGIN TRANSACTION;
END
GO
IF EXISTS (SELECT * FROM #tmpErrors) ROLLBACK TRANSACTION
GO
IF @@TRANCOUNT>0 BEGIN
PRINT N'The transacted portion of the database update succeeded.'
COMMIT TRANSACTION
END
ELSE PRINT N'The transacted portion of the database update failed.'
GO
DROP TABLE #tmpErrors
GO
Tôi tự hỏi, có thể tạo tập lệnh như vậy mà không có Visual Studio không? Ví dụ, nếu tôi xây dựng giải pháp với MSBuild và sau đó tạo tập lệnh này với một số công cụ? Tôi tin rằng, nếu tôi đọc lắp ráp như mảng byte và sau đó serialize nó vào chuỗi hex và chèn vào mẫu kịch bản - nó có thể làm việc, nhưng có lẽ có một số giải pháp tiêu chuẩn dễ dàng hơn?
Cảm ơn.
Điều này là tuyệt vời và nhanh hơn nhiều so với cố gắng để 'FROM 'C: \ FilePath'', Tôi cũng phải thêm '0x' vào hex như trong' FROM 0xhexWithoutQuotes'. –