(update 2013/07/22 here's what I've cobbled together, though it needs to be integrated with the below
SELECT projects.name, ConnStr.object_name, ConnStr.parameter_name, ConnStr.description,
ConnStr.design_default_value, ConnStr.default_value,
SrvName.parameter_name, SrvName.description, SrvName.design_default_value,
SrvName.default_value,
--the catalog name
DBName.parameter_name, DBName.design_default_value, DBName.default_value
FROM ssisdb.catalog.projects
INNER JOIN [SSISDB].[catalog].[object_parameters] ConnStr
ON SSISDB.catalog.projects.project_id = ConnStr.project_id
--get the server name. Left outer join as it doesn't appear in the table otherwise
LEFT OUTER JOIN [SSISDB].[catalog].[object_parameters] SrvName
ON connstr.[object_name] = SrvName.[object_name]
AND connstr.parameter_name LIKE 'CM%ConnectionString'
AND srvname.parameter_name LIKE 'CM%ServerName'
--get the database name as well
LEFT OUTER JOIN [SSISDB].[catalog].[object_parameters] DBName
ON connstr.[object_name] = DBName.[object_name]
AND connstr.parameter_name LIKE 'CM%ConnectionString'
AND DBName.parameter_name LIKE 'CM%InitialCatalog'
WHERE ConnStr.parameter_name LIKE 'CM%ConnectionString'
AND LEFT(connstr.parameter_name, LEN(connstr.parameter_name) - CHARINDEX('.',REVERSE(connstr.parameter_name)))
= LEFT(SrvName.parameter_name, LEN(SrvName.parameter_name) - CHARINDEX('.',REVERSE(SrvName.parameter_name)))
AND LEFT(connstr.parameter_name, LEN(connstr.parameter_name) - CHARINDEX('.',REVERSE(connstr.parameter_name)))
= LEFT(DBName.parameter_name, LEN(DBName.parameter_name) - CHARINDEX('.',REVERSE(DBName.parameter_name)))
ORDER BY projects.name, ConnStr.object_name, connstr.parameter_name
)
Part of the "fun" with SSIS has always been the myriad of ways a parameter can be set. Variables, Configuration Files, Properties, Jobs.... and probably 1 or 2 others, just to confuse things.
I've already posted (http://thebakingdba.blogspot.com/2013/05/ssis-finding-your-connection-strings-in.html) about the connection strings in 2008/R2. This is the version for 2012...
In theory, it should be simple - if you're using the new methodology, you're developing with SSISDB, and using it to hold your configuration values. Thus, it has all the connection string details within.
However, it can be overridden at the job level... so you potentially need both. What I do is grab the most recent run of the package, as well as what SSISDB says it has for the package, and present both.
Let me know if there are any questions. I see on mine, for instance, dupes where the connection string is the same, but the parameter name is different. Not sure why yet.
Let me know if you see any problems or places to improve, or heck, maybe I'm just doing it wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
USE ssisdb | |
--thebakingdba.blogspot.com 2013/07/18 1.00 | |
--purpose - grab the connection strings from SSISDB for the package and the job runs. | |
SELECT ISNULL(project_based_values.project_name, | |
job_based_values.project_name) AS project_name, | |
ISNULL(project_based_values.package_name, | |
job_based_values.package_name) AS package_name, | |
ISNULL(project_based_values.parameter_name, | |
job_based_values.parameter_name) AS parameter_name, | |
project_based_values.Connection_String AS Project_Connection_String, | |
job_based_values.connection_string AS Job_Connection_String, | |
CASE WHEN project_based_values.Connection_String = job_based_values.connection_string | |
THEN 'SAME' | |
WHEN project_based_values.Connection_String = job_based_values.connection_string | |
THEN 'DIFFERENT' | |
WHEN project_based_values.Connection_String IS NULL | |
THEN 'PROJECT' | |
WHEN job_based_values.connection_string IS NULL THEN 'JOB' | |
END AS Values_From | |
FROM ( | |
SELECT ip.name AS project_name, [a].[object_name] AS package_name, | |
[a].[parameter_name], | |
[design_default_value] AS Connection_String | |
FROM ( | |
SELECT [object_name], [parameter_name], | |
MAX([project_version_lsn]) AS max_project_version_lsn | |
FROM [internal].[object_parameters] | |
WHERE [parameter_name] LIKE '%connectionstring%' | |
GROUP BY [object_name], [parameter_name] | |
) a | |
INNER JOIN [internal].[object_parameters] a2 | |
ON [a].[object_name] = [a2].[object_name] | |
AND [a].[parameter_name] = [a2].[parameter_name] | |
AND a.[max_project_version_lsn] = [a2].[project_version_lsn] | |
INNER JOIN internal.projects ip | |
ON a2.project_id = ip.project_id | |
) project_based_values | |
FULL OUTER JOIN ( | |
SELECT project_name, package_name, parameter_name, | |
parameter_value AS connection_string | |
FROM internal.[execution_parameter_values] | |
INNER JOIN internal.executions | |
ON internal.execution_parameter_values.execution_id = internal.executions.execution_id | |
INNER JOIN ( | |
SELECT MAX(execution_id) AS max_execution_id | |
FROM internal.executions | |
GROUP BY project_name, package_name | |
) most_recent_run | |
ON internal.executions.execution_id = most_recent_run.max_execution_id | |
WHERE parameter_name LIKE '%.connectionstring' | |
) job_based_values | |
ON project_based_values.project_name = job_based_values.project_name | |
AND REPLACE(project_based_values.package_name, '.dtsx', '') = REPLACE(job_based_values.package_name, | |
'.dtsx', '') | |
AND project_based_values.parameter_name = job_based_values.parameter_name | |
AND project_based_values.Connection_String = job_based_values.connection_string | |
ORDER BY 1, 2, 3, 6 |
No comments:
Post a Comment