Du har tre verktyg för att distribuera .ispac-filer i SSISDB-katalogen.
- ISDeploymentWizard.exe
- ManagedObjectModel
- TSQL
Du använder redan guiden och den fungerar inte på grund av autentiseringsproblem. Jag tror att även med din MOM-metod kommer du fortfarande att stöta på autentiseringsproblem. Det lämnar TSQL-metoden och eftersom du har en giltig inloggning kommer förhoppningsvis detta att fungera.
Följande kod kommer att serialisera din .ispac, skapa distributionsmappen om den inte redan finns, distribuera projektet och sedan tilldela ett parametervärde.
I SSMS måste du ändra ditt läge till SQLCMD-läge som är tillgängligt under menyn Fråga. Efter att ha gjort det, tryck Ctrl-Skift-M för att ta fram makro-saken och det låter dig ange var .ispac-filen kan hittas.
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
Om du deltog i SQL Pass Summit 2012-konferensen visade jag detta i mitt föredrag om 2012 implementeringsmodell men jag täckte inte parametern del. Jag tror att det sista samtalet är korrekt men jag har inte verifierat det. Jag har länkat till dokumentationen för procedursamtalet så att du kan skräddarsy det efter dina specifika behov.
Exempel på PowerShell-implementering
Uppdatering augusti 2013
Jag har lärt mig något hos min nuvarande kund. Vi har våra bärbara datorer som är anslutna till hemdomänen. Vi har konton på kundens AD-nätverk. Närhelst jag behöver "göra" något i kundens värld måste jag starta min process och instruera den att presentera mina "utländska" referenser. Det som gör detta möjligt är RunAs . Alternativ referens
Jag skapade en svit med batchfiler som startar alla processer jag behöver. De tar formen av
runas /netonly:ForeignDomain\Doppelganger "C:\windows\system32\cmd.exe"
Jag har en för en kommandotolk (ovan), Visual Studio, SSMS, PowerShell, PowerShell ISE och några andra specialappar som måste fungera med sin domän.
Genom att använda runas-metoden har jag kunnat distribuera paket med alla ovanstående metoder (liksom att distribuera direkt från en Visual Studio-instans som körs med främmande referenser).