您有 3 个工具用于将 .ispac 文件部署到 SSISDB 目录中。
- ISDeploymentWizard.exe
- 托管对象模型
- TSQL
您已经在使用该向导,但由于身份验证问题而无法正常工作。我认为即使使用您的 MOM 方法,您仍然会遇到身份验证问题。这留下了 TSQL 方法,并且由于您具有有效的登录,因此希望这将起作用。
以下代码将序列化您的 .ispac,如果部署文件夹不存在,则创建部署文件夹,部署项目,然后分配参数值。
在 SSMS 中,您需要将模式更改为 SQLCMD 模式,该模式在查询菜单下可用。完成此操作后,按 Ctrl-Shift-M 以调出宏,它将允许您指定可以找到 .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
如果您参加了 SQL Pass 峰会 2012 会议,我在关于2012 部署模型的演讲中对此进行了演示,但我没有涉及参数部分。我相信最后一次通话是正确的,但我尚未验证。我已链接到过程调用的文档,以便您可以根据自己的特定需求对其进行定制。
示例PowerShell 实现
2013 年 8 月更新
我从我现在的客户那里学到了一些东西。我们的笔记本电脑已加入主域。我们在客户的 AD 网络上有帐户。每当我需要在客户的世界中“做”某事时,我需要启动我的流程并指示它展示我的“外国”凭据。使这成为可能的是RunAs。备用参考
我创建了一套批处理文件来启动我需要的每个进程。他们采取的形式
runas /netonly:ForeignDomain\Doppelganger "C:\windows\system32\cmd.exe"
我有一个用于命令提示符(上图)、Visual Studio、SSMS、PowerShell、PowerShell ISE 和其他一些需要使用其域的专业应用程序。
使用 runas 方法,我已经能够使用上述所有方法部署包(以及直接从使用外部凭据运行的 Visual Studio 实例进行部署)。