diff --git a/.gitignore b/.gitignore index 07d9537..c4b1b02 100644 --- a/.gitignore +++ b/.gitignore @@ -350,3 +350,4 @@ MigrationBackup/ .ionide/ .vscode/settings.json .DS_Store +/tSQLtSSISTemplate/TemplateSSIS/*.database diff --git a/tSQLtSSISTemplate/ReferenceObjects/PrepareServer.sql b/tSQLtSSISTemplate/ReferenceObjects/PrepareServer.sql new file mode 100644 index 0000000..7033052 --- /dev/null +++ b/tSQLtSSISTemplate/ReferenceObjects/PrepareServer.sql @@ -0,0 +1,191 @@ +IF OBJECT_ID('tempdb..#Private_GetAssemblyKeyBytes') IS NOT NULL DROP PROCEDURE #Private_GetAssemblyKeyBytes; +GO +CREATE PROCEDURE #Private_GetAssemblyKeyBytes + @AssemblyKeyBytes VARBINARY(MAX) = NULL OUTPUT, + @AssemblyKeyThumbPrint VARBINARY(MAX) = NULL OUTPUT +AS + SELECT @AssemblyKeyBytes = +0x4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062+ +0x652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000504500004C01030000FEC6610000000000000000E00022200B013000000A0000000600000000000042280000002000000040000000000010002000000002000004000000000000+ +0x000400000000000000008000000002000077FF0000030040850000100000100000000010000010000000000000100000000000000000000000F02700004F00000000400000A003000000000000000000000000000000000000006000000C000000B82600+ +0x001C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002E746578740000004808000000200000000A0000000200+ +0x00000000000000000000000000200000602E72737263000000A00300000040000000040000000C0000000000000000000000000000400000402E72656C6F6300000C00000000600000000200000010000000000000000000000000000040000042000000+ +0x000000000000000000000000002428000000000000480000000200050058200000E005000009000000000000000000000000000000382600008000000000000000000000000000000000000000000000000000000000000000000000001E02280F00000A+ +0x2A42534A4201000100000000000C00000076322E302E35303732370000000005006C000000A8010000237E0000140200002C02000023537472696E67730000000040040000040000002355530044040000100000002347554944000000540400008C0100+ +0x0023426C6F620000000000000002000001471400000900000000FA013300160000010000001000000002000000010000000F0000000E0000000100000001000000000078010100000000000600ED00DE0106005A01DE0106002100AC010F00FE01000006+ +0x00490094010600D00094010600B100940106004101940106000D01940106002601940106007900940106003500BF0106001300BF0106009400940106006000940106000D028D010000000001000000000001000100000010002502140241000100010050+ +0x20000000008618A601060001000900A60101001100A60106001900A6010A002900A60110003100A60110003900A60110004100A60110004900A60110005100A60110005900A60110006100A60115006900A60110007100A60110007900A60110008100A6+ +0x0106002E000B00C5002E001300CE002E001B00ED002E002300F6002E002B000C012E0033000C012E003B000C012E00430012012E004B001D012E0053000C012E005B000C012E00630035012E006B005F012E0073006C0104800000010000000000000001+ +0x0000002300140200000200000000000000000000001A000A000000000000000000003C4D6F64756C653E006D73636F726C696200477569644174747269627574650044656275676761626C6541747472696275746500436F6D56697369626C6541747472+ +0x696275746500417373656D626C795469746C6541747472696275746500417373656D626C794B65794E616D6541747472696275746500417373656D626C7954726164656D61726B41747472696275746500417373656D626C7946696C6556657273696F6E+ +0x41747472696275746500417373656D626C79436F6E66696775726174696F6E41747472696275746500417373656D626C794465736372697074696F6E41747472696275746500436F6D70696C6174696F6E52656C61786174696F6E734174747269627574+ +0x6500417373656D626C7950726F6475637441747472696275746500417373656D626C79436F7079726967687441747472696275746500417373656D626C79436F6D70616E794174747269627574650052756E74696D65436F6D7061746962696C69747941+ +0x7474726962757465007453514C74417373656D626C794B65792E646C6C0053797374656D0053797374656D2E5265666C656374696F6E002E63746F720053797374656D2E446961676E6F73746963730053797374656D2E52756E74696D652E496E746572+ +0x6F7053657276696365730053797374656D2E52756E74696D652E436F6D70696C6572536572766963657300446562756767696E674D6F646573004F626A656374007453514C74417373656D626C794B657900656D707479000000000000267A3D3EFF6D06+ +0x43A8941A157D8B705800042001010803200001052001011111042001010E042001010208B77A5C561934E08980A00024000004800000940000000602000000240000525341310004000001000100B9AF416AD8DFEDEC08A5652FA257F1242BF4ED60EF5A+ +0x7B84A429604D62C919C5663A9C7710A7C5DF9953B69EC89FCE85D71E051140B273F4C9BF890A2BC19C48F22D7B1F1D739F90EEBC5729555F7F8B63ED088BBB083B336F7E38B92D44CFE1C842F09632B85114772FF2122BC638C78D497C4E88C2D656C166+ +0x050D6E1EF3940801000800000000001E01000100540216577261704E6F6E457863657074696F6E5468726F777301080100020000000000150100107453514C74417373656D626C794B657900000501000000000A0100057453514C74000017010012436F+ +0x7079726967687420C2A920203230313900002901002430333536303035622D373166642D346466332D383530322D32376336613630366539653800000C010007312E302E302E3000001D0100187453514C745F4F6666696369616C5369676E696E674B65+ +0x79000000005642725AAE45AE4D87E0D4C4F71412AE67BB189E365C03DA200721B8B9860E54DB1F44DDE09808DFA92D492263E9A97001DB32AB614DB4F0211728EC4F120FF4D449F72882BED8AF6FC8597C551F71365CAF85A1229F299BF3A358BFADD10A+ +0x9A9E50F97628A049B6CCF965B33BF61775545C368D1BAEB095DFFA5AA46D22945F0000000000FEC66100000000020000001C010000D4260000D4080000525344536DC8DF27864EE14292C9ACAF39850C6901000000443A5C615C315C7453514C745C7453+ +0x514C74434C525C7453514C74417373656D626C794B65795C6F626A5C437275697365436F6E74726F6C5C7453514C74417373656D626C794B65792E7064620000000000000000000000000000000000000000000000000000000000000000000000000000+ +0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000+ +0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001828000000000000000000003228000000200000000000000000000000000000000000000000000024280000000000000000000000005F+ +0x436F72446C6C4D61696E006D73636F7265652E646C6C0000000000FF250020001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000+ +0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000+ +0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000+ +0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000+ +0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001000000018000080000000+ +0x00000000000000000000000100010000003000008000000000000000000000000000000100000000004800000058400000440300000000000000000000440334000000560053005F00560045005200530049004F004E005F0049004E0046004F00000000+ +0x00BD04EFFE00000100000001000000000000000100000000003F000000000000000400000002000000000000000000000000000000440000000100560061007200460069006C00650049006E0066006F00000000002400040000005400720061006E0073+ +0x006C006100740069006F006E00000000000000B004A4020000010053007400720069006E006700460069006C00650049006E0066006F0000008002000001003000300030003000300034006200300000001A000100010043006F006D006D0065006E0074+ +0x00730000000000000022000100010043006F006D00700061006E0079004E0061006D00650000000000000000004A0011000100460069006C0065004400650073006300720069007000740069006F006E00000000007400530051004C0074004100730073+ +0x0065006D0062006C0079004B006500790000000000300008000100460069006C006500560065007200730069006F006E000000000031002E0030002E0030002E00300000004A001500010049006E007400650072006E0061006C004E0061006D00650000+ +0x007400530051004C00740041007300730065006D0062006C0079004B00650079002E0064006C006C00000000004800120001004C006500670061006C0043006F007000790072006900670068007400000043006F00700079007200690067006800740020+ +0x00A90020002000320030003100390000002A00010001004C006500670061006C00540072006100640065006D00610072006B00730000000000000000005200150001004F0072006900670069006E0061006C00460069006C0065006E0061006D00650000+ +0x007400530051004C00740041007300730065006D0062006C0079004B00650079002E0064006C006C00000000002C0006000100500072006F0064007500630074004E0061006D006500000000007400530051004C0074000000340008000100500072006F+ +0x006400750063007400560065007200730069006F006E00000031002E0030002E0030002E003000000038000800010041007300730065006D0062006C0079002000560065007200730069006F006E00000031002E0030002E0030002E0030000000000000+ +0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000+ +0x000C0000004438000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000+ +0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000+ +0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000+ +0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000+ +0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000+ +0x000000000000000000 + ,@AssemblyKeyThumbPrint = 0xE8FFF6F136D7B53E ; +GO +IF OBJECT_ID('tempdb..#Private_EnableCLR') IS NOT NULL DROP PROCEDURE #Private_EnableCLR; +GO +CREATE PROCEDURE #Private_EnableCLR +AS +BEGIN + EXEC master.sys.sp_configure @configname='clr enabled', @configvalue = 1; + RECONFIGURE; +END; +GO +IF OBJECT_ID('tempdb..#Private_GetSQLProductMajorVersion') IS NOT NULL DROP PROCEDURE #Private_GetSQLProductMajorVersion; +GO +CREATE PROCEDURE #Private_GetSQLProductMajorVersion +AS + RETURN CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS NVARCHAR(MAX)),4) AS INT); +GO +DECLARE @Version INT; +EXEC @Version = #Private_GetSQLProductMajorVersion; +PRINT @Version; +GO +IF OBJECT_ID('tempdb..#RemoveAssemblyKey') IS NOT NULL DROP PROCEDURE #RemoveAssemblyKey; +GO +CREATE PROCEDURE #RemoveAssemblyKey +AS +BEGIN + IF(NOT EXISTS(SELECT * FROM sys.fn_my_permissions(NULL,'server') AS FMP WHERE FMP.permission_name = 'CONTROL SERVER')) + BEGIN + RAISERROR('Only principals with CONTROL SERVER permission can execute this procedure.',16,10); + RETURN -1; + END; + DECLARE @master_sys_sp_executesql NVARCHAR(MAX); SET @master_sys_sp_executesql = 'master.sys.sp_executesql'; + DECLARE @ProductMajorVersion INT; + EXEC @ProductMajorVersion = #Private_GetSQLProductMajorVersion; + IF SUSER_ID('tSQLtAssemblyKey') IS NOT NULL DROP LOGIN tSQLtAssemblyKey; + EXEC @master_sys_sp_executesql N'IF ASYMKEY_ID(''tSQLtAssemblyKey'') IS NOT NULL DROP ASYMMETRIC KEY tSQLtAssemblyKey;'; + EXEC @master_sys_sp_executesql N'IF EXISTS(SELECT * FROM sys.assemblies WHERE name = ''tSQLtAssemblyKey'') DROP ASSEMBLY tSQLtAssemblyKey;'; + DECLARE @cmd NVARCHAR(MAX); + IF(@ProductMajorVersion>=14) + BEGIN + DECLARE @TrustedHash NVARCHAR(MAX); + DECLARE @AssemblyKeyBytes VARBINARY(MAX); + EXEC #Private_GetAssemblyKeyBytes @AssemblyKeyBytes = @AssemblyKeyBytes OUT; + SELECT @TrustedHash = CONVERT(NVARCHAR(MAX),HASHBYTES('SHA2_512',@AssemblyKeyBytes),1); + SELECT @cmd = + 'IF EXISTS(SELECT 1 FROM sys.trusted_assemblies WHERE hash = ' + @TrustedHash +' AND description = ''tSQLt Ephemeral'')'+ + 'EXEC sys.sp_drop_trusted_assembly @hash = ' + @TrustedHash + ';'; + EXEC master.sys.sp_executesql @cmd; + END; +END; +GO +IF OBJECT_ID('tempdb..#InstallAssemblyKey') IS NOT NULL DROP PROCEDURE #InstallAssemblyKey; +GO +CREATE PROCEDURE #InstallAssemblyKey +AS +BEGIN + IF(NOT EXISTS(SELECT * FROM sys.fn_my_permissions(NULL,'server') AS FMP WHERE FMP.permission_name = 'CONTROL SERVER')) + BEGIN + RAISERROR('Only principals with CONTROL SERVER permission can execute this procedure.',16,10); + RETURN -1; + END; + DECLARE @cmd NVARCHAR(MAX); + DECLARE @cmd2 NVARCHAR(MAX); + DECLARE @master_sys_sp_executesql NVARCHAR(MAX); SET @master_sys_sp_executesql = 'master.sys.sp_executesql'; + DECLARE @ProductMajorVersion INT; + EXEC @ProductMajorVersion = #Private_GetSQLProductMajorVersion; + DECLARE @AssemblyKeyBytes VARBINARY(MAX), + @AssemblyKeyThumbPrint VARBINARY(MAX); + EXEC #Private_GetAssemblyKeyBytes @AssemblyKeyBytes OUT, @AssemblyKeyThumbPrint OUT; + SET @cmd = 'IF EXISTS(SELECT * FROM sys.assemblies WHERE name = ''tSQLtAssemblyKey'') DROP ASSEMBLY tSQLtAssemblyKey;'; + EXEC @master_sys_sp_executesql @cmd; + SET @cmd2 = 'SELECT @cmd = ''DROP ASSEMBLY ''+QUOTENAME(A.name)+'';'''+ + ' FROM master.sys.assemblies AS A'+ + ' WHERE A.clr_name LIKE ''tsqltassemblykey, %'';'; + EXEC sys.sp_executesql @cmd2,N'@cmd NVARCHAR(MAX) OUTPUT',@cmd OUT; + EXEC @master_sys_sp_executesql @cmd; + DECLARE @Hash VARBINARY(64) = NULL; + IF(@ProductMajorVersion>=14) + BEGIN + SELECT @Hash = HASHBYTES('SHA2_512',@AssemblyKeyBytes); + SELECT @cmd = + 'IF NOT EXISTS (SELECT * FROM sys.trusted_assemblies WHERE [hash] = @Hash)'+ + 'BEGIN'+ + ' EXEC sys.sp_add_trusted_assembly @hash = @Hash, @description = N''tSQLt Ephemeral'';'+ + 'END ELSE BEGIN'+ + ' SELECT @Hash = NULL FROM sys.trusted_assemblies WHERE [hash] = @Hash AND description <> ''tSQLt Ephemeral'';'+ + 'END;'; + EXEC @master_sys_sp_executesql @cmd, N'@Hash VARBINARY(64) OUTPUT',@Hash OUT; + END; + SELECT @cmd = + 'CREATE ASSEMBLY tSQLtAssemblyKey AUTHORIZATION dbo FROM ' + + CONVERT(NVARCHAR(MAX),@AssemblyKeyBytes,1) + + ' WITH PERMISSION_SET = SAFE;' + EXEC @master_sys_sp_executesql @cmd; + IF SUSER_ID('tSQLtAssemblyKey') IS NOT NULL DROP LOGIN tSQLtAssemblyKey; + SET @cmd = N'IF ASYMKEY_ID(''tSQLtAssemblyKey'') IS NOT NULL DROP ASYMMETRIC KEY tSQLtAssemblyKey;'; + EXEC @master_sys_sp_executesql @cmd; + SET @cmd2 = 'SELECT @cmd = ISNULL(''DROP LOGIN ''+QUOTENAME(SP.name)+'';'','''')+''DROP ASYMMETRIC KEY '' + QUOTENAME(AK.name) + '';'''+ + ' FROM master.sys.asymmetric_keys AS AK'+ + ' LEFT JOIN master.sys.server_principals AS SP'+ + ' ON AK.sid = SP.sid'+ + ' WHERE AK.thumbprint = @AssemblyKeyThumbPrint;'; + EXEC sys.sp_executesql @cmd2,N'@cmd NVARCHAR(MAX) OUTPUT, @AssemblyKeyThumbPrint VARBINARY(MAX)',@cmd OUT, @AssemblyKeyThumbPrint; + EXEC @master_sys_sp_executesql @cmd; + SET @cmd = 'CREATE ASYMMETRIC KEY tSQLtAssemblyKey FROM ASSEMBLY tSQLtAssemblyKey;'; + EXEC @master_sys_sp_executesql @cmd; + SET @cmd = 'CREATE LOGIN tSQLtAssemblyKey FROM ASYMMETRIC KEY tSQLtAssemblyKey;'; + EXEC @master_sys_sp_executesql @cmd; + SET @cmd = 'DROP ASSEMBLY tSQLtAssemblyKey;'; + EXEC @master_sys_sp_executesql @cmd; + IF(@Hash IS NOT NULL) + BEGIN + SELECT @cmd = 'EXEC sys.sp_drop_trusted_assembly @hash = @Hash;'; + EXEC @master_sys_sp_executesql @cmd, N'@Hash VARBINARY(64)',@Hash; + END; + IF(@ProductMajorVersion>=14) + BEGIN + SET @cmd = 'GRANT UNSAFE ASSEMBLY TO tSQLtAssemblyKey;'; + END + ELSE + BEGIN + SET @cmd = 'GRANT EXTERNAL ACCESS ASSEMBLY TO tSQLtAssemblyKey;'; + END; + EXEC @master_sys_sp_executesql @cmd; +END; +GO +IF OBJECT_ID('tempdb..#PrepareServer') IS NOT NULL DROP PROCEDURE #PrepareServer; +GO +CREATE PROCEDURE #PrepareServer +AS +BEGIN + EXEC #Private_EnableCLR; + EXEC #InstallAssemblyKey; +END; +GO +EXEC #PrepareServer; +GO diff --git a/tSQLtSSISTemplate/ReferenceObjects/ReferenceObjects.sqlproj b/tSQLtSSISTemplate/ReferenceObjects/ReferenceObjects.sqlproj new file mode 100644 index 0000000..18830e8 --- /dev/null +++ b/tSQLtSSISTemplate/ReferenceObjects/ReferenceObjects.sqlproj @@ -0,0 +1,60 @@ + + + + Debug + AnyCPU + ReferenceObjects + 2.0 + 4.1 + {7de3b0bc-090a-4ce6-a691-23291168b692} + Microsoft.Data.Tools.Schema.Sql.Sql150DatabaseSchemaProvider + Database + + + ReferenceObjects + ReferenceObjects + 1033, CI + BySchemaAndSchemaType + True + v4.5 + CS + Properties + False + True + True + + + bin\Release\ + $(MSBuildProjectName).sql + False + pdbonly + true + false + true + prompt + 4 + + + bin\Debug\ + $(MSBuildProjectName).sql + false + true + full + false + true + true + prompt + 4 + + + 11.0 + + True + 11.0 + + + + + + + \ No newline at end of file diff --git a/tSQLtSSISTemplate/ReferenceObjects/tSQLt.2019.dacpac b/tSQLtSSISTemplate/ReferenceObjects/tSQLt.2019.dacpac new file mode 100644 index 0000000..9d0101e Binary files /dev/null and b/tSQLtSSISTemplate/ReferenceObjects/tSQLt.2019.dacpac differ diff --git a/tSQLtSSISTemplate/TemplateDatabase/SSISObjects.TransformObjectList_GetObjects.sql b/tSQLtSSISTemplate/TemplateDatabase/SSISObjects.TransformObjectList_GetObjects.sql new file mode 100644 index 0000000..bc9b148 --- /dev/null +++ b/tSQLtSSISTemplate/TemplateDatabase/SSISObjects.TransformObjectList_GetObjects.sql @@ -0,0 +1,9 @@ +CREATE VIEW SSISObjects.TransformObjectList_GetObjects +AS +SELECT + name, + SCHEMA_NAME(schema_id) SchemaName, + QUOTENAME(SCHEMA_NAME(schema_id)) QuotedSchemaName, + QUOTENAME(name) QuotedName + FROM sys.objects; +GO \ No newline at end of file diff --git a/tSQLtSSISTemplate/TemplateDatabase/SSISObjects.sql b/tSQLtSSISTemplate/TemplateDatabase/SSISObjects.sql new file mode 100644 index 0000000..7fba24a --- /dev/null +++ b/tSQLtSSISTemplate/TemplateDatabase/SSISObjects.sql @@ -0,0 +1,2 @@ +CREATE SCHEMA SSISObjects; + diff --git a/tSQLtSSISTemplate/TemplateDatabase/TemplateDatabase.sqlproj b/tSQLtSSISTemplate/TemplateDatabase/TemplateDatabase.sqlproj new file mode 100644 index 0000000..dd7489c --- /dev/null +++ b/tSQLtSSISTemplate/TemplateDatabase/TemplateDatabase.sqlproj @@ -0,0 +1,72 @@ + + + + Debug + AnyCPU + TemplateDatabase + 2.0 + 4.1 + {23a6e107-9ab3-4f27-8365-1c5c19147e94} + Microsoft.Data.Tools.Schema.Sql.Sql150DatabaseSchemaProvider + Database + + + TemplateDatabase + TemplateDatabase + 1033, CI + BySchemaAndSchemaType + True + v4.5 + CS + Properties + False + True + True + + + bin\Release\ + $(MSBuildProjectName).sql + False + pdbonly + true + false + true + prompt + 4 + + + bin\Debug\ + $(MSBuildProjectName).sql + false + true + full + false + true + true + prompt + 4 + + + 11.0 + + True + 11.0 + + + + + + + + + + + + + + $(DacPacRootPath)\Extensions\Microsoft\SQLDB\Extensions\SqlServer\150\SqlSchemas\master.dacpac + False + master + + + \ No newline at end of file diff --git a/tSQLtSSISTemplate/TemplateDatabase/TransformedObjectList.sql b/tSQLtSSISTemplate/TemplateDatabase/TransformedObjectList.sql new file mode 100644 index 0000000..5a18d01 --- /dev/null +++ b/tSQLtSSISTemplate/TemplateDatabase/TransformedObjectList.sql @@ -0,0 +1,8 @@ +CREATE TABLE [dbo].[TransformedObjectList] +( + [name] nvarchar(128), + [SchemaName] nvarchar(128), + [QuotedSchemaName] nvarchar(258), + [QuotedName] nvarchar(258), + [QuotedFullName] nvarchar(517) +) \ No newline at end of file diff --git a/tSQLtSSISTemplate/TemplateDatabaseTests/TemplateDatabaseTests.sqlproj b/tSQLtSSISTemplate/TemplateDatabaseTests/TemplateDatabaseTests.sqlproj new file mode 100644 index 0000000..29d89ea --- /dev/null +++ b/tSQLtSSISTemplate/TemplateDatabaseTests/TemplateDatabaseTests.sqlproj @@ -0,0 +1,85 @@ + + + + Debug + AnyCPU + TemplateDatabaseTests + 2.0 + 4.1 + {2c86a7b1-bd0e-4aa2-aaa6-9df8b515df2a} + Microsoft.Data.Tools.Schema.Sql.Sql150DatabaseSchemaProvider + Database + + + TemplateDatabaseTests + TemplateDatabaseTests + 1033, CI + BySchemaAndSchemaType + True + v4.5 + CS + Properties + False + True + True + + + bin\Release\ + $(MSBuildProjectName).sql + False + pdbonly + true + false + true + prompt + 4 + + + bin\Debug\ + $(MSBuildProjectName).sql + false + true + full + false + true + true + prompt + 4 + + + 11.0 + + True + 11.0 + + + + + + + + + ..\ReferenceObjects\tSQLt.2019.dacpac + False + + + $(DacPacRootPath)\Extensions\Microsoft\SQLDB\Extensions\SqlServer\150\SqlSchemas\master.dacpac + False + master + + + + + TemplateDatabase + $(SqlCmdVar__1) + + + + + TemplateDatabase + {23a6e107-9ab3-4f27-8365-1c5c19147e94} + True + False + + + \ No newline at end of file diff --git a/tSQLtSSISTemplate/TemplateSSIS.CI/App.config b/tSQLtSSISTemplate/TemplateSSIS.CI/App.config new file mode 100644 index 0000000..56efbc7 --- /dev/null +++ b/tSQLtSSISTemplate/TemplateSSIS.CI/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/tSQLtSSISTemplate/TemplateSSIS.CI/CreateSSISFolder.sql b/tSQLtSSISTemplate/TemplateSSIS.CI/CreateSSISFolder.sql new file mode 100644 index 0000000..bc6cc69 --- /dev/null +++ b/tSQLtSSISTemplate/TemplateSSIS.CI/CreateSSISFolder.sql @@ -0,0 +1,4 @@ +DECLARE @folder_id BIGINT +EXEC [SSISDB].[catalog].[create_folder] @folder_name=N'TestFolder', @folder_id=@folder_id OUTPUT +SELECT @folder_id +EXEC [SSISDB].[catalog].[set_folder_description] @folder_name=N'TestFolder', @folder_description=N'Ephemeral folder for testing!' diff --git a/tSQLtSSISTemplate/TemplateSSIS.CI/DeleteSSISFolder.sql b/tSQLtSSISTemplate/TemplateSSIS.CI/DeleteSSISFolder.sql new file mode 100644 index 0000000..0ba3670 --- /dev/null +++ b/tSQLtSSISTemplate/TemplateSSIS.CI/DeleteSSISFolder.sql @@ -0,0 +1,28 @@ +(MAX) = 'TestFolder'; +DECLARE @cmd NVARCHAR(MAX) = +ISNULL( + ( + SELECT 'EXEC [SSISDB].[catalog].[delete_project] @project_name=N'''+P.name+''',@folder_name=N'''+F.name+''';' + FROM SSISDB.catalog.folders AS F + JOIN SSISDB.catalog.projects AS P + ON P.folder_id = F.folder_id + WHERE F.name = @FolderName + FOR XML PATH(''),TYPE + ).value('.','NVARCHAR(MAX)') +,'') + +ISNULL( + ( + SELECT 'EXEC [SSISDB].[catalog].[delete_environment] @environment_name=N'''+E.name+''',@folder_name=N'''+F.name+''';' + FROM SSISDB.catalog.folders AS F + JOIN SSISDB.catalog.environments AS E + ON E.folder_id = F.folder_id + WHERE F.name = @FolderName + FOR XML PATH(''),TYPE + ).value('.','NVARCHAR(MAX)') +,'') + +(SELECT 'EXEC [SSISDB].[catalog].[delete_folder] @folder_name=N'''+F.name+''';' + FROM SSISDB.catalog.folders AS F + WHERE F.name = @FolderName); + +--PRINT @cmd +EXEC(@cmd); diff --git a/tSQLtSSISTemplate/TemplateSSIS.CI/DeploySSIS.ps1 b/tSQLtSSISTemplate/TemplateSSIS.CI/DeploySSIS.ps1 new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/tSQLtSSISTemplate/TemplateSSIS.CI/DeploySSIS.ps1 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tSQLtSSISTemplate/TemplateSSIS.CI/Properties/AssemblyInfo.cs b/tSQLtSSISTemplate/TemplateSSIS.CI/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..619927c --- /dev/null +++ b/tSQLtSSISTemplate/TemplateSSIS.CI/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("TemplateSSIS.CI")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("TemplateSSIS.CI")] +[assembly: AssemblyCopyright("Copyright © 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("52efcc53-d796-4c8d-85e7-43da7a3ffced")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/tSQLtSSISTemplate/TemplateSSIS.CI/SetVariableValues.sql b/tSQLtSSISTemplate/TemplateSSIS.CI/SetVariableValues.sql new file mode 100644 index 0000000..24df026 --- /dev/null +++ b/tSQLtSSISTemplate/TemplateSSIS.CI/SetVariableValues.sql @@ -0,0 +1,20 @@ +EXEC [SSISDB].[catalog].[create_environment] @environment_name=N'TemplateSSIS', @environment_description=N'', @folder_name=N'TestFolder.ref' +GO +DECLARE @var sql_variant = N'Data Source=.,41419;User ID=tSQLt.Build.SSIS;Initial Catalog=tSQLt_Dev;Provider=SQLNCLI11.1;Application Name=SourceDBConnection;Auto Translate=False; ' +EXEC [SSISDB].[catalog].[create_environment_variable] @variable_name=N'SourceDB_ConnectionString', @sensitive=False, @description=N'', @environment_name=N'TemplateSSIS', @folder_name=N'TestFolder.ref', @value=@var, @data_type=N'String' +GO +DECLARE @var sql_variant = N'Data Source=.,41419;User ID=tSQLt.Build.SSIS;Initial Catalog=tSQLt_Dev;Provider=SQLNCLI11.1;Application Name=TargetDBConnection;Auto Translate=False; ' +EXEC [SSISDB].[catalog].[create_environment_variable] @variable_name=N'TargetDB_ConnectionString', @sensitive=False, @description=N'', @environment_name=N'TemplateSSIS', @folder_name=N'TestFolder.ref', @value=@var, @data_type=N'String' +GO +DECLARE @var SQL_VARIANT = N'' +EXEC [SSISDB].[catalog].[create_environment_variable] @variable_name=N'SourceDB_Password', @sensitive=True, @description=N'', @environment_name=N'TemplateSSIS', @folder_name=N'TestFolder.ref', @value=@var, @data_type=N'String' +GO +DECLARE @var SQL_VARIANT = N'' +EXEC [SSISDB].[catalog].[create_environment_variable] @variable_name=N'TargetDB_Password', @sensitive=True, @description=N'', @environment_name=N'TemplateSSIS', @folder_name=N'TestFolder.ref', @value=@var, @data_type=N'String' +GO + +GO + + +GO + diff --git a/tSQLtSSISTemplate/TemplateSSIS.CI/TemplateSSIS.CI.csproj b/tSQLtSSISTemplate/TemplateSSIS.CI/TemplateSSIS.CI.csproj new file mode 100644 index 0000000..d803a3e --- /dev/null +++ b/tSQLtSSISTemplate/TemplateSSIS.CI/TemplateSSIS.CI.csproj @@ -0,0 +1,59 @@ + + + + + Debug + AnyCPU + {52EFCC53-D796-4C8D-85E7-43DA7A3FFCED} + Library + TemplateSSIS.CI + TemplateSSIS.CI + v4.7.2 + 512 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tSQLtSSISTemplate/TemplateSSIS.CI/VariableReferenceMapping.sql b/tSQLtSSISTemplate/TemplateSSIS.CI/VariableReferenceMapping.sql new file mode 100644 index 0000000..2fb6e80 --- /dev/null +++ b/tSQLtSSISTemplate/TemplateSSIS.CI/VariableReferenceMapping.sql @@ -0,0 +1,16 @@ +Declare @reference_id bigint +EXEC [SSISDB].[catalog].[create_environment_reference] @environment_name=N'TemplateSSIS', @environment_folder_name=N'TestFolder.ref', @reference_id=@reference_id OUTPUT, @project_name=N'TemplateSSIS', @folder_name=N'TestFolder', @reference_type=A +Select @reference_id +GO +EXEC [SSISDB].[catalog].[set_object_parameter_value] @object_type=20, @parameter_name=N'SourceDB_ConnectionString', @object_name=N'TemplateSSIS', @folder_name=N'TestFolder', @project_name=N'TemplateSSIS', @value_type=R, @parameter_value=N'SourceDB_ConnectionString' +GO +EXEC [SSISDB].[catalog].[set_object_parameter_value] @object_type=20, @parameter_name=N'SourceDB_Password', @object_name=N'TemplateSSIS', @folder_name=N'TestFolder', @project_name=N'TemplateSSIS', @value_type=R, @parameter_value=N'SourceDB_Password' +GO +EXEC [SSISDB].[catalog].[set_object_parameter_value] @object_type=20, @parameter_name=N'TargetDB_ConnectionString', @object_name=N'TemplateSSIS', @folder_name=N'TestFolder', @project_name=N'TemplateSSIS', @value_type=R, @parameter_value=N'TargetDB_ConnectionString' +GO +EXEC [SSISDB].[catalog].[set_object_parameter_value] @object_type=20, @parameter_name=N'TargetDB_Password', @object_name=N'TemplateSSIS', @folder_name=N'TestFolder', @project_name=N'TemplateSSIS', @value_type=R, @parameter_value=N'TargetDB_Password' +GO + +GO + + diff --git a/tSQLtSSISTemplate/TemplateSSIS/Project.params b/tSQLtSSISTemplate/TemplateSSIS/Project.params new file mode 100644 index 0000000..6eb907c --- /dev/null +++ b/tSQLtSSISTemplate/TemplateSSIS/Project.params @@ -0,0 +1,66 @@ + + + + + {5ca98efc-d874-4151-bfb6-ed53d5f8396e} + + + 0 + 0 + 0 + tSQLt_SSISTemplate + 18 + + + + + {e4223dcd-5ffe-42e2-919d-d9ded7f79189} + + + 0 + 0 + 0 + .,42419 + 18 + + + + + {cc1ba36a-d090-481d-83d7-6c7d69384db6} + + + 0 + 0 + 0 + Data Source=.,42419;Initial Catalog=tSQLt_SSISTemplate;Provider=SQLNCLI11.1;Integrated Security=SSPI;Auto Translate=False; + 18 + + + \ No newline at end of file diff --git a/tSQLtSSISTemplate/TemplateSSIS/TemplateSSIS.dtproj b/tSQLtSSISTemplate/TemplateSSIS/TemplateSSIS.dtproj new file mode 100644 index 0000000..a4de0f8 --- /dev/null +++ b/tSQLtSSISTemplate/TemplateSSIS/TemplateSSIS.dtproj @@ -0,0 +1,349 @@ + + + Project + 15.0.2000.170 + 9.0.1.0 + $base64$PFNvdXJjZUNvbnRyb2xJbmZvIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOmRkbDI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDAzL2VuZ2luZS8yIiB4bWxuczpkZGwyXzI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDAzL2VuZ2luZS8yLzIiIHhtbG5zOmRkbDEwMF8xMDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDA4L2VuZ2luZS8xMDAvMTAwIiB4bWxuczpkZGwyMDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDEwL2VuZ2luZS8yMDAiIHhtbG5zOmRkbDIwMF8yMDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDEwL2VuZ2luZS8yMDAvMjAwIiB4bWxuczpkZGwzMDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDExL2VuZ2luZS8zMDAiIHhtbG5zOmRkbDMwMF8zMDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDExL2VuZ2luZS8zMDAvMzAwIiB4bWxuczpkZGw0MDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDEyL2VuZ2luZS80MDAiIHhtbG5zOmRkbDQwMF80MDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDEyL2VuZ2luZS80MDAvNDAwIiB4bWxuczpkZGw1MDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDEzL2VuZ2luZS81MDAiIHhtbG5zOmRkbDUwMF81MDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDEzL2VuZ2luZS81MDAvNTAwIiB4bWxuczpkd2Q9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vRGF0YVdhcmVob3VzZS9EZXNpZ25lci8xLjAiPg0KICA8RW5hYmxlZD5mYWxzZTwvRW5hYmxlZD4NCiAgPFByb2plY3ROYW1lPjwvUHJvamVjdE5hbWU+DQogIDxBdXhQYXRoPjwvQXV4UGF0aD4NCiAgPExvY2FsUGF0aD48L0xvY2FsUGF0aD4NCiAgPFByb3ZpZGVyPjwvUHJvdmlkZXI+DQo8L1NvdXJjZUNvbnRyb2xJbmZvPg== + + TemplateSSIS.database + TemplateSSIS.database + + + + + + + + {e76abba9-f95a-46a8-82a3-80a2bebe6058} + TemplateSSIS + 1 + 0 + 0 + + + 2021-12-26T16:22:58.3471572-05:00 + DESKTOP-4IR3L3D\lizba + DESKTOP-4IR3L3D + + + AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAACLagM8yK+E2q54vOIoAP+AAAAAACAAAAAAAQZgAAAAEAACAAAAAXS9dPfWOwWAJ3HDes94wLfaK8xBG0VtzA4/c6YNOW9gAAAAAOgAAAAAIAACAAAAA7oELFhoFG/gzFESKylRO62a1uJ+92oZ7fj54wfxMzI5AAAABwu5xD1GanZzsmadm5Ty8QBF3wGY1gMQy9oFXxp438/g+Msk262EF3qiEkZAqLk20QmfXXkWz4az0Q2SKCs7zmpicc+1PlzRwF1MiRShtGjDBIktYOcZAyjAKn231GOWAjpfOCzFSnk4hHK+VmkLOXkqMvI0y9C2HAwa4oMAHvIRfYxJdqri06cptjFuMqnUBAAAAA+16TNg01+eEs4bAmvxmwX/Z7wLR79k8eLXUYiDkFipLNO1sMPBdWsncJ9xJT8sUbNLlbToBhdsoy5REE2mjLSA== + 1 + + + + + + + + + + + {0F1EA62B-0BC1-442D-9677-D5FE9549B831} + TransformObjectList + 1 + 0 + 23 + + + {8DA0A6E0-76D5-49C3-AB1F-069B9217E569} + 8 + + + 1 + + + + + {1C0779B8-BE74-4478-AB9E-81342EFEE9C9} + + + + + 0 + 0 + 0 + SELECT * FROM SSISObjects.TransformObjectList_GetObjects; + 18 + + + + + + + + + + + 0 + 0 + 0 + false + 3 + + + + + + + + + + + 0 + 0 + 0 + 1 + 9 + + + + + + + + + + + 0 + 0 + 0 + 5 + 9 + + + + + + + + + + + 0 + 0 + 0 + false + 3 + + + + + + + + + + + 0 + 0 + 1 + 18 + + + + + + + + + + + 0 + 0 + 0 + false + 3 + + + + + + + + + + + 0 + 0 + 0 + 18 + + + + + + + + + + + 0 + 0 + 0 + false + 3 + + + + + + + + + + + 0 + 0 + 0 + Data Source=.,42419;Initial Catalog=tSQLt_SSISTemplate;Provider=SQLNCLI11.1;Integrated Security=SSPI;Auto Translate=False; + 18 + + + + + + + + + + + 0 + 0 + 0 + 1 + 9 + + + + + + + + + + + 0 + 0 + 0 + 5 + 9 + + + + + + + + + + + 0 + 0 + 0 + false + 3 + + + + + + + + + + + 0 + 0 + 1 + 18 + + + + + + + + + + + 0 + 0 + 0 + false + 3 + + + + + + + + + + + 0 + 0 + 0 + 18 + + + + + + + + + + + + + + Azure + + bin + + + + + SQLServer2017 + true + + + + + + + + LastModifiedTime + LastModifiedTime + 2021-12-26T21:49:19.8944065Z + + + + + + Development + + bin + + + + + SQLServer2017 + false + + + + + + + + LastModifiedTime + LastModifiedTime + 2021-12-27T21:15:07.6696708Z + + + + + + \ No newline at end of file diff --git a/tSQLtSSISTemplate/TemplateSSIS/TransformObjectList.dtsx b/tSQLtSSISTemplate/TemplateSSIS/TransformObjectList.dtsx new file mode 100644 index 0000000..cb354a2 --- /dev/null +++ b/tSQLtSSISTemplate/TemplateSSIS/TransformObjectList.dtsx @@ -0,0 +1,626 @@ + + + 8 + + + @[$Project::SourceDB_ConnectionString] + + + + + + @[$Project::TargetDB_InitialCatalog] + @[$Project::TargetDB_ServerName] + + + + + + + + SELECT * FROM SSISObjects.TransformObjectList_GetObjects; + + + + + + + + + + + + 0 + [dbo].[TransformedObjectList] + + + 1252 + false + 3 + false + false + TABLOCK,CHECK_CONSTRAINTS + 2147483647 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + [SSISObjects].[TransformObjectList_GetObjects] + + select name, SCHEMA_NAME(schema_id) SchemaName, QUOTENAME(SCHEMA_NAME(schema_id)) QuotedSchemaName, QUOTENAME(name) QuotedName from sys.objects + $Package::SourceDbConnectionQuery + 1252 + false + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #{Package\Data Flow Task\OLE DB Source.Outputs[OLE DB Source Output].Columns[QuotedSchemaName]} + "." + #{Package\Data Flow Task\OLE DB Source.Outputs[OLE DB Source Output].Columns[QuotedName]} + QuotedSchemaName + "." + QuotedName + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataSourceViewID + + + TableInfoObjectType + Table + + + + + + + DataSourceViewID + + + TableInfoObjectType + View + + + +]]> + \ No newline at end of file diff --git a/tSQLtSSISTemplate/TemplateSSISTests/RunTests.sql b/tSQLtSSISTemplate/TemplateSSISTests/RunTests.sql new file mode 100644 index 0000000..258abb3 --- /dev/null +++ b/tSQLtSSISTemplate/TemplateSSISTests/RunTests.sql @@ -0,0 +1 @@ +EXEC tSQLt.RunAll \ No newline at end of file diff --git a/tSQLtSSISTemplate/TemplateSSISTests/TemplateSSISTests.sqlproj b/tSQLtSSISTemplate/TemplateSSISTests/TemplateSSISTests.sqlproj new file mode 100644 index 0000000..2a19072 --- /dev/null +++ b/tSQLtSSISTemplate/TemplateSSISTests/TemplateSSISTests.sqlproj @@ -0,0 +1,97 @@ + + + + Debug + AnyCPU + TemplateSSISTests + 2.0 + 4.1 + {c01b58d3-06d7-43b1-9514-8131c3935d0b} + Microsoft.Data.Tools.Schema.Sql.Sql150DatabaseSchemaProvider + Database + + + TemplateSSISTests + TemplateSSISTests + 1033, CI + BySchemaAndSchemaType + True + v4.5 + CS + Properties + False + True + True + + + bin\Release\ + $(MSBuildProjectName).sql + False + pdbonly + true + false + true + prompt + 4 + + + bin\Debug\ + $(MSBuildProjectName).sql + false + true + full + false + true + true + prompt + 4 + + + 11.0 + + True + 11.0 + + + + + + + + + + + + ..\ReferenceObjects\tSQLt.2019.dacpac + False + + + $(DacPacRootPath)\Extensions\Microsoft\SQLDB\Extensions\SqlServer\150\SqlSchemas\master.dacpac + False + master + + + + + TemplateDatabaseTests + $(SqlCmdVar__1) + + + + + TemplateDatabaseTests + {2c86a7b1-bd0e-4aa2-aaa6-9df8b515df2a} + True + False + + + TemplateDatabase + {23a6e107-9ab3-4f27-8365-1c5c19147e94} + True + False + + + + + + \ No newline at end of file diff --git a/tSQLtSSISTemplate/TemplateSSISTests/TransformObjectListTests.sql b/tSQLtSSISTemplate/TemplateSSISTests/TransformObjectListTests.sql new file mode 100644 index 0000000..f322f23 --- /dev/null +++ b/tSQLtSSISTemplate/TemplateSSISTests/TransformObjectListTests.sql @@ -0,0 +1,78 @@ +--EXEC tSQLt.DropClass 'TransformObjectListTests' +GO +CREATE SCHEMA TransformObjectListTests AUTHORIZATION [tSQLt.TestClass] +GO +CREATE PROCEDURE TransformObjectListTests.[execute SSIS package TransformObjectList] +AS +BEGIN + DECLARE @package_name nvarchar(260) = N'TransformObjectList.dtsx'; + DECLARE @project_name nvarchar(128) = N'TemplateSSIS'; + DECLARE @folder_name nvarchar(128) = N'TestFolder'; + DECLARE @environment_name nvarchar(128) = N'TemplateSSIS'; + DECLARE @environment_folder_name nvarchar(128) = N'TestFolder.ref'; + + -- SSIS Execution Parameters + DECLARE @execution_id bigint; + DECLARE @reference_id bigint = null; + + -- SSIS Catalog Variables (object_type = 50) + DECLARE @logging_level smallint = 3; + DECLARE @is_synchronized smallint = 1; + + -- Project Variables (object_type = 20) + -- N/A + + -- Package Variables (object_type = 30) + -- N/A + + /**********************************************************/ + /* Run the SSIS Package */ + /**********************************************************/ + +SELECT @reference_id = ER.reference_id + FROM SSISDB.catalog.environment_references AS ER + JOIN SSISDB.catalog.projects AS P + ON P.project_id = ER.project_id + JOIN SSISDB.catalog.folders AS F + ON F.folder_id = P.folder_id + WHERE F.name = @folder_name + AND P.Name = @project_name + AND ER.environment_folder_name = @environment_folder_name + AND ER.environment_name = @environment_name + + + EXEC [SSISDB].[catalog].[create_execution] + @package_name=@package_name, @execution_id=@execution_id OUTPUT, + @folder_name=@folder_name, @project_name=@project_name, + @use32bitruntime=False, @reference_id= @reference_id, @runinscaleout=False + PRINT 'SSIS ExecutionId:'+ CAST(@execution_id AS NVARCHAR(MAX)); + + EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type = 50, @parameter_name=N'LOGGING_LEVEL', @parameter_value=@logging_level; + EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type = 50, @parameter_name=N'SYNCHRONIZED', @parameter_value=@is_synchronized; + + EXEC [SSISDB].[catalog].[start_execution] @execution_id + +END +GO +GO +--[@tSQLt:NoTransaction](DEFAULT) +CREATE PROCEDURE TransformObjectListTests.[test SSIS is cool] +AS +BEGIN + + EXEC tSQLt.FakeTable 'dbo.TransformedObjectList'; + EXEC tSQLt.FakeTable 'SSISObjects.TransformObjectList_GetObjects'; + EXEC('INSERT INTO SSISObjects.TransformObjectList_GetObjects(QuotedSchemaName,QuotedName) VALUES(''[QSN1]'',''[QN1]'');'); + + EXEC TransformObjectListTests.[execute SSIS package TransformObjectList]; + + SELECT QuotedFullName INTO #Actual FROM dbo.TransformedObjectList; + SELECT TOP(0)A.* INTO #Expected FROM #Actual A RIGHT JOIN #Actual X ON 1=0; + INSERT INTO #Expected VALUES('[QSN1].[QN1]'); + + EXEC tSQLt.AssertEqualsTable '#Expected','#Actual'; + + + +END; +GO diff --git a/tSQLtSSISTemplate/TemplateSolution.sln b/tSQLtSSISTemplate/TemplateSolution.sln new file mode 100644 index 0000000..bd2c70d --- /dev/null +++ b/tSQLtSSISTemplate/TemplateSolution.sln @@ -0,0 +1,97 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.31829.152 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{159641D6-6404-4A2A-AE62-294DE0FE8301}") = "TemplateSSIS", "TemplateSSIS\TemplateSSIS.dtproj", "{3870F7D5-3FFC-4ABA-9CAA-F8DC130C73F5}" +EndProject +Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "TemplateDatabase", "TemplateDatabase\TemplateDatabase.sqlproj", "{23A6E107-9AB3-4F27-8365-1C5C19147E94}" +EndProject +Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "TemplateDatabaseTests", "TemplateDatabaseTests\TemplateDatabaseTests.sqlproj", "{2C86A7B1-BD0E-4AA2-AAA6-9DF8B515DF2A}" +EndProject +Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "TemplateSSISTests", "TemplateSSISTests\TemplateSSISTests.sqlproj", "{C01B58D3-06D7-43B1-9514-8131C3935D0B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TemplateSSIS.CI", "TemplateSSIS.CI\TemplateSSIS.CI.csproj", "{52EFCC53-D796-4C8D-85E7-43DA7A3FFCED}" +EndProject +Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "ReferenceObjects", "ReferenceObjects\ReferenceObjects.sqlproj", "{7DE3B0BC-090A-4CE6-A691-23291168B692}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Azure|Any CPU = Azure|Any CPU + Debug|Any CPU = Debug|Any CPU + Development|Any CPU = Development|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3870F7D5-3FFC-4ABA-9CAA-F8DC130C73F5}.Azure|Any CPU.ActiveCfg = Azure + {3870F7D5-3FFC-4ABA-9CAA-F8DC130C73F5}.Azure|Any CPU.Build.0 = Azure + {3870F7D5-3FFC-4ABA-9CAA-F8DC130C73F5}.Debug|Any CPU.ActiveCfg = Development + {3870F7D5-3FFC-4ABA-9CAA-F8DC130C73F5}.Debug|Any CPU.Build.0 = Development + {3870F7D5-3FFC-4ABA-9CAA-F8DC130C73F5}.Development|Any CPU.ActiveCfg = Development + {3870F7D5-3FFC-4ABA-9CAA-F8DC130C73F5}.Development|Any CPU.Build.0 = Development + {3870F7D5-3FFC-4ABA-9CAA-F8DC130C73F5}.Release|Any CPU.ActiveCfg = Development + {3870F7D5-3FFC-4ABA-9CAA-F8DC130C73F5}.Release|Any CPU.Build.0 = Development + {23A6E107-9AB3-4F27-8365-1C5C19147E94}.Azure|Any CPU.ActiveCfg = Release|Any CPU + {23A6E107-9AB3-4F27-8365-1C5C19147E94}.Azure|Any CPU.Build.0 = Release|Any CPU + {23A6E107-9AB3-4F27-8365-1C5C19147E94}.Azure|Any CPU.Deploy.0 = Release|Any CPU + {23A6E107-9AB3-4F27-8365-1C5C19147E94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {23A6E107-9AB3-4F27-8365-1C5C19147E94}.Debug|Any CPU.Build.0 = Debug|Any CPU + {23A6E107-9AB3-4F27-8365-1C5C19147E94}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {23A6E107-9AB3-4F27-8365-1C5C19147E94}.Development|Any CPU.ActiveCfg = Debug|Any CPU + {23A6E107-9AB3-4F27-8365-1C5C19147E94}.Development|Any CPU.Build.0 = Debug|Any CPU + {23A6E107-9AB3-4F27-8365-1C5C19147E94}.Development|Any CPU.Deploy.0 = Debug|Any CPU + {23A6E107-9AB3-4F27-8365-1C5C19147E94}.Release|Any CPU.ActiveCfg = Release|Any CPU + {23A6E107-9AB3-4F27-8365-1C5C19147E94}.Release|Any CPU.Build.0 = Release|Any CPU + {23A6E107-9AB3-4F27-8365-1C5C19147E94}.Release|Any CPU.Deploy.0 = Release|Any CPU + {2C86A7B1-BD0E-4AA2-AAA6-9DF8B515DF2A}.Azure|Any CPU.ActiveCfg = Release|Any CPU + {2C86A7B1-BD0E-4AA2-AAA6-9DF8B515DF2A}.Azure|Any CPU.Build.0 = Release|Any CPU + {2C86A7B1-BD0E-4AA2-AAA6-9DF8B515DF2A}.Azure|Any CPU.Deploy.0 = Release|Any CPU + {2C86A7B1-BD0E-4AA2-AAA6-9DF8B515DF2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2C86A7B1-BD0E-4AA2-AAA6-9DF8B515DF2A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2C86A7B1-BD0E-4AA2-AAA6-9DF8B515DF2A}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {2C86A7B1-BD0E-4AA2-AAA6-9DF8B515DF2A}.Development|Any CPU.ActiveCfg = Debug|Any CPU + {2C86A7B1-BD0E-4AA2-AAA6-9DF8B515DF2A}.Development|Any CPU.Build.0 = Debug|Any CPU + {2C86A7B1-BD0E-4AA2-AAA6-9DF8B515DF2A}.Development|Any CPU.Deploy.0 = Debug|Any CPU + {2C86A7B1-BD0E-4AA2-AAA6-9DF8B515DF2A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2C86A7B1-BD0E-4AA2-AAA6-9DF8B515DF2A}.Release|Any CPU.Build.0 = Release|Any CPU + {2C86A7B1-BD0E-4AA2-AAA6-9DF8B515DF2A}.Release|Any CPU.Deploy.0 = Release|Any CPU + {C01B58D3-06D7-43B1-9514-8131C3935D0B}.Azure|Any CPU.ActiveCfg = Release|Any CPU + {C01B58D3-06D7-43B1-9514-8131C3935D0B}.Azure|Any CPU.Build.0 = Release|Any CPU + {C01B58D3-06D7-43B1-9514-8131C3935D0B}.Azure|Any CPU.Deploy.0 = Release|Any CPU + {C01B58D3-06D7-43B1-9514-8131C3935D0B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C01B58D3-06D7-43B1-9514-8131C3935D0B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C01B58D3-06D7-43B1-9514-8131C3935D0B}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {C01B58D3-06D7-43B1-9514-8131C3935D0B}.Development|Any CPU.ActiveCfg = Debug|Any CPU + {C01B58D3-06D7-43B1-9514-8131C3935D0B}.Development|Any CPU.Build.0 = Debug|Any CPU + {C01B58D3-06D7-43B1-9514-8131C3935D0B}.Development|Any CPU.Deploy.0 = Debug|Any CPU + {C01B58D3-06D7-43B1-9514-8131C3935D0B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C01B58D3-06D7-43B1-9514-8131C3935D0B}.Release|Any CPU.Build.0 = Release|Any CPU + {C01B58D3-06D7-43B1-9514-8131C3935D0B}.Release|Any CPU.Deploy.0 = Release|Any CPU + {52EFCC53-D796-4C8D-85E7-43DA7A3FFCED}.Azure|Any CPU.ActiveCfg = Debug|Any CPU + {52EFCC53-D796-4C8D-85E7-43DA7A3FFCED}.Azure|Any CPU.Build.0 = Debug|Any CPU + {52EFCC53-D796-4C8D-85E7-43DA7A3FFCED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {52EFCC53-D796-4C8D-85E7-43DA7A3FFCED}.Debug|Any CPU.Build.0 = Debug|Any CPU + {52EFCC53-D796-4C8D-85E7-43DA7A3FFCED}.Development|Any CPU.ActiveCfg = Debug|Any CPU + {52EFCC53-D796-4C8D-85E7-43DA7A3FFCED}.Development|Any CPU.Build.0 = Debug|Any CPU + {52EFCC53-D796-4C8D-85E7-43DA7A3FFCED}.Release|Any CPU.ActiveCfg = Release|Any CPU + {52EFCC53-D796-4C8D-85E7-43DA7A3FFCED}.Release|Any CPU.Build.0 = Release|Any CPU + {7DE3B0BC-090A-4CE6-A691-23291168B692}.Azure|Any CPU.ActiveCfg = Release|Any CPU + {7DE3B0BC-090A-4CE6-A691-23291168B692}.Azure|Any CPU.Build.0 = Release|Any CPU + {7DE3B0BC-090A-4CE6-A691-23291168B692}.Azure|Any CPU.Deploy.0 = Release|Any CPU + {7DE3B0BC-090A-4CE6-A691-23291168B692}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7DE3B0BC-090A-4CE6-A691-23291168B692}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7DE3B0BC-090A-4CE6-A691-23291168B692}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {7DE3B0BC-090A-4CE6-A691-23291168B692}.Development|Any CPU.ActiveCfg = Debug|Any CPU + {7DE3B0BC-090A-4CE6-A691-23291168B692}.Development|Any CPU.Build.0 = Debug|Any CPU + {7DE3B0BC-090A-4CE6-A691-23291168B692}.Development|Any CPU.Deploy.0 = Debug|Any CPU + {7DE3B0BC-090A-4CE6-A691-23291168B692}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7DE3B0BC-090A-4CE6-A691-23291168B692}.Release|Any CPU.Build.0 = Release|Any CPU + {7DE3B0BC-090A-4CE6-A691-23291168B692}.Release|Any CPU.Deploy.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {E5EDBA7E-450D-47C1-BB39-1D69BC3B2B11} + EndGlobalSection +EndGlobal