Máte 3 nástroje pro nasazení souborů .ispac do katalogu SSISDB.
- ISDeploymentWizard.exe
- ManagedObjectModel
- TSQL
Průvodce již používáte a kvůli problémům s ověřením nefunguje. Myslím, že i s vaším přístupem MOM budete stále narážet na problémy s ověřováním. Tím zůstává přístup TSQL a protože máte platné přihlášení, doufejme, že to bude fungovat.
Následující kód serializuje váš .ispac, vytvoří složku nasazení, pokud ještě neexistuje, nasadí projekt a poté přiřadí hodnotu parametru.
V SSMS budete muset změnit svůj režim na režim SQLCMD, který je dostupný v nabídce Dotaz. Poté stiskněte Ctrl-Shift-M pro vyvolání makra a umožní vám určit, kde lze najít soubor .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
Pokud jste se zúčastnili konference SQL Pass Summit 2012, předvedl jsem to ve své přednášce na Model nasazení 2012 ale nepokryl jsem parametr část. Věřím, že poslední výzva je správná, ale nemám ji ověřenou. Připojil jsem k dokumentaci pro volání procedury, abyste si ji mohli přizpůsobit svým konkrétním potřebám.
Ukázka implementace PowerShellu
Aktualizace ze srpna 2013
U svého současného klienta jsem se něco naučil. Máme své notebooky, které jsou připojeny k domácí doméně. Máme účty v AD síti klienta. Kdykoli potřebuji něco „udělat“ ve světě klienta, musím spustit svůj proces a dát mu pokyn, aby předložil mé „cizí“ pověření. Co to umožňuje, je RunAs . Alternativní odkaz
Vytvořil jsem sadu dávkových souborů, které spouštějí každý proces, který potřebuji. Mají podobu
runas /netonly:ForeignDomain\Doppelganger "C:\windows\system32\cmd.exe"
Mám jeden pro příkazový řádek (výše), Visual Studio, SSMS, PowerShell, PowerShell ISE a některé další speciální aplikace, které potřebují pracovat se svou doménou.
Pomocí přístupu runas jsem byl schopen nasadit balíčky pomocí všech výše uvedených metod (stejně jako nasazení přímo z instance sady Visual Studio spuštěné s cizími přihlašovacími údaji).