Bạn có 3 công cụ để triển khai tệp .ispac vào danh mục SSISDB.
- ISDeploymentWizard.exe
- ManagedObjectModel
- TSQL
Bạn đang sử dụng trình hướng dẫn và nó không hoạt động do các vấn đề về xác thực. Tôi nghĩ rằng ngay cả với phương pháp MOM của bạn, bạn vẫn sẽ gặp phải các vấn đề về xác thực. Điều đó khiến cách tiếp cận TSQL rời khỏi và vì bạn có đăng nhập hợp lệ, hy vọng điều này sẽ hoạt động.
Đoạn mã sau sẽ tuần tự hóa .ispac của bạn, tạo thư mục triển khai nếu nó chưa tồn tại, triển khai dự án và sau đó gán giá trị tham số.
Trong SSMS, bạn sẽ cần thay đổi chế độ của mình thành chế độ SQLCMD có sẵn trong menu Truy vấn. Sau khi thực hiện điều đó, nhấn Ctrl-Shift-M để hiển thị điều vĩ mô và nó sẽ cho phép bạn chỉ định nơi có thể tìm thấy tệp .ispac.
USE SSISDB
GO
IF ('$(isPacPath)' = '$' + '(isPacPath)')
BEGIN
THROW 50000, N'This script must be run in SQLCMD mode.', 1;
END
GO
-- You must be in SQLCMD mode
-- setvar isPacPath "C:\sandbox\SSDTDeploy\TSQLDeploy\bin\Development\TSQLDeploy.ispac"
:setvar isPacPath "<isPacFilePath, nvarchar(4000), C:\sandbox\SSDTDeploy\TSQLDeploy\bin\Development\TSQLDeploy.ispac>"
DECLARE
@folder_name nvarchar(128) = 'TSQLDeploy'
, @folder_id bigint = NULL
-- this must match the ispac
, @project_name nvarchar(128) = 'TSQLDeploy'
, @project_stream varbinary(max)
, @operation_id bigint = NULL;
-- Read the zip (ispac) data in from the source file
SELECT
@project_stream = T.stream
FROM
(
SELECT
*
FROM
OPENROWSET(BULK N'$(isPacPath)', SINGLE_BLOB ) AS B
) AS T (stream);
-- Test for catalog existences
IF NOT EXISTS
(
SELECT
CF.name
FROM
catalog.folders AS CF
WHERE
CF.name = @folder_name
)
BEGIN
-- Create the folder for our project
EXECUTE [catalog].[create_folder]
@folder_name
, @folder_id OUTPUT;
END
-- Actually deploy the project
EXECUTE [catalog].[deploy_project]
@folder_name
, @project_name
, @project_stream
, @operation_id OUTPUT;
-- Check to see if something went awry
SELECT
OM.*
FROM
catalog.operation_messages AS OM;
-- Use this to set parameters
-- http://msdn.microsoft.com/en-us/library/ff878162.aspx
EXECUTE catalog.set_object_parameter_value
-- Use the value 20 to indicate a project parameter
-- or the value 30 to indicate a package parameter
@object_type = 20
, @folder_name = @folder_name
, @project_name = @project_name
, @parameter_name = N'' -- nvarchar(128)
, @parameter_value = NULL -- sql_variant
, @object_name = N'' -- nvarchar(260)
, @value_type = '' -- char(1)
-- Use the character V to indicate that parameter_value is a literal value
-- that will be used by default if no other values are assigned prior
-- to execution.
-- Use the character R to indicate that parameter_value is a referenced value
-- and has been set to the name of an environment variable.
-- This argument is optional, the character V is used by default
Nếu bạn đã tham dự hội nghị SQL Pass Summit 2012, tôi đã demo điều này trong bài nói chuyện của mình trên Mô hình triển khai năm 2012 nhưng tôi đã không đề cập đến thông số phần. Tôi tin rằng cuộc gọi cuối cùng là chính xác nhưng tôi chưa xác minh nó. Tôi đã liên kết đến tài liệu cho lệnh gọi thủ tục để bạn có thể điều chỉnh nó cho phù hợp với nhu cầu cụ thể của mình.
Cập nhật tháng 8 năm 2013
Tôi đã học được điều gì đó ở khách hàng hiện tại của mình. Chúng tôi có máy tính xách tay của chúng tôi được kết nối với miền gia đình. Chúng tôi có tài khoản trên mạng AD của khách hàng. Bất cứ khi nào tôi cần "làm" điều gì đó trong thế giới của khách hàng, tôi cần khởi chạy quy trình của mình và hướng dẫn nó xuất trình các thông tin đăng nhập "nước ngoài" của tôi. Điều làm cho điều này có thể thực hiện được là RunAs . Thay thế tham chiếu
Tôi đã tạo một bộ tệp hàng loạt khởi chạy mọi quy trình tôi cần. Chúng có dạng
runas /netonly:ForeignDomain\Doppelganger "C:\windows\system32\cmd.exe"
Tôi có một cái cho dấu nhắc lệnh (ở trên), Visual Studio, SSMS, PowerShell, PowerShell ISE và một số ứng dụng đặc biệt khác cần hoạt động với miền của chúng.
Sử dụng cách tiếp cận runas, tôi đã có thể triển khai các gói bằng tất cả các phương pháp trên (cũng như triển khai trực tiếp từ phiên bản Visual Studio đang được chạy với thông tin đăng nhập nước ngoài).