Advertisement
SqlQuantumLeap

SQLCLR SP Parses CSV file to Result Set - Installer

Apr 15th, 2016 (edited)
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 27.81 KB | None | 0 0
  1. /*
  2.     *** DO NOT USE IN PRODUCTION -- TESTING / DEMONSTRATION CODE ONLY ***
  3.  
  4.     This script relates to the following SQL Server Central Forum topic:
  5.     Processing strings ( https://www.sqlservercentral.com/forums/topic/processing-strings )
  6.  
  7.     *** DO NOT USE IN PRODUCTION -- TESTING / DEMONSTRATION CODE ONLY ***
  8.  
  9.     The Assembly below is compiled against .NET Framework version 3.5 so that it will work in SQL Server 2008
  10.     and newer (i.e. all versions that support SQLCLR outside of SQL Server 2005). The Assembly does require
  11.     having a PERMISSION_SET of UNSAFE due to the TextFieldParser class having a Host Protection Attribute, but
  12.     the database does not need to have TRUSTWORTHY set to ON since the Assembly is signed, an Asymmetric Key
  13.     is created from the Assembly, and a Login is created from that Asymmetric Key and granted the appropriate
  14.     permission.
  15.  
  16.     *** DO NOT USE IN PRODUCTION -- TESTING / DEMONSTRATION CODE ONLY ***
  17.  
  18.     The .NET / C# source code for the [ParseCSV] and [GarbageCollect] SQLCLR Stored Procedures is located at:
  19.     https://pastebin.com/BY8F994R
  20.  
  21.     *** DO NOT USE IN PRODUCTION -- TESTING / DEMONSTRATION CODE ONLY ***
  22.  
  23.     A T-SQL script containing tests for the [ParseCSV] SQLCLR Stored Procedure is located at:
  24.     https://pastebin.com/WGDkQTxt
  25.  
  26.     *** DO NOT USE IN PRODUCTION -- TESTING / DEMONSTRATION CODE ONLY ***
  27.  
  28.     Date: 2016-04-11
  29.     Version: 1.0.0
  30.  
  31.     For more functions like this, please visit: https://SQLsharp.com
  32.  
  33.     Stairway to SQLCLR series: https://www.sqlservercentral.com/stairways/stairway-to-sqlclr
  34.  
  35.     Copyright (c) 2016 Sql Quantum Leap. All rights reserved.
  36.     https://SqlQuantumLeap.com
  37. */
  38.  
  39.  
  40. SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON;
  41. SET NUMERIC_ROUNDABORT OFF;
  42. SET NOCOUNT ON;
  43. GO
  44.  
  45. USE [master];
  46. GO
  47.  
  48. -- DROP DATABASE [CSVParser];
  49. IF (DB_ID(N'CSVParser') IS NULL)
  50. BEGIN
  51.     PRINT N'Creating DB: CSVParser...';
  52.  
  53.     DECLARE @DataPath NVARCHAR(500) = CONVERT(NVARCHAR(500), SERVERPROPERTY('InstanceDefaultDataPath'));
  54.     DECLARE @LogPath NVARCHAR(500) = CONVERT(NVARCHAR(500), SERVERPROPERTY('InstanceDefaultLogPath'));
  55.     EXEC('
  56.     CREATE DATABASE [CSVParser]
  57.         ON PRIMARY
  58.         ( NAME = N''CSVParser'', FILENAME = N''' + @DataPath + N'CSVParser.mdf'', SIZE = 4160KB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ),
  59.         FILEGROUP [UserData] DEFAULT
  60.         ( NAME = N''CSVParser_UserData'', FILENAME = N''' + @DataPath + N'CSVParser_UserData.ndf'', SIZE = 512000KB, MAXSIZE = UNLIMITED, FILEGROWTH = 20480KB )
  61.         LOG ON
  62.         ( NAME = N''CSVParser_log'', FILENAME = N''' + @LogPath + N'CSVParser_log.ldf'' , SIZE = 512000KB, MAXSIZE = UNLIMITED, FILEGROWTH = 20480KB )
  63.         COLLATE Latin1_General_100_CI_AS;
  64.         ');
  65. END;
  66. GO
  67.  
  68. -- Make sure "CLR Integration" feature is enabled.
  69. IF (EXISTS(
  70.     SELECT sc.*
  71.     FROM sys.configurations sc
  72.     WHERE sc.[name] = N'clr enabled'
  73.     AND sc.[value_in_use] = 0
  74.         )
  75.     )
  76. BEGIN
  77.     EXEC sp_configure 'clr enabled', 1;
  78.     RECONFIGURE;
  79. END;
  80. GO
  81.  
  82. --------------------------------------------------------------------------------
  83.  
  84. DECLARE @ErrorMessage NVARCHAR(4000);
  85.  
  86.  
  87. -- We first need to create the Assembly containing just
  88. -- the Key info so that we can get the "thumbprint" /
  89. -- "publickeytoken" value from it. That value is used to
  90. -- determine if the Asymmetric Key and Login already exist.
  91. --
  92. -- We only need this Assembly temporarily, so create within
  93. -- a transaction to guarantee cleanup if something fails.
  94.  
  95. DECLARE @AssemblyName sysname, -- keep lower-case for servers with case-sensitive / binary collations
  96.         @AsymmetricKeyName sysname, -- keep lower-case for servers with case-sensitive / binary collations
  97.         @LoginName sysname, -- keep lower-case for servers with case-sensitive / binary collations
  98.         @PublicKeyToken VARBINARY(32),
  99.         @SQL NVARCHAR(MAX);
  100.  
  101. SET @AssemblyName = N'$ParseCSV-TEMPORARY-KeyInfo$';
  102.  
  103. SET @AsymmetricKeyName = N'ParseCSV_PermissionKey';
  104. SET @LoginName = N'ParseCSV_PermissionLogin';
  105.  
  106. BEGIN TRY
  107.     BEGIN TRAN;
  108.  
  109.     IF (NOT EXISTS(
  110.                 SELECT  *
  111.                 FROM        [sys].[assemblies] sa
  112.                 WHERE   [sa].[name] = @AssemblyName
  113.             )
  114.         )
  115.     BEGIN
  116.         SET @SQL = N'
  117.         CREATE ASSEMBLY [' + @AssemblyName + N']
  118.             AUTHORIZATION [dbo]
  119.             FROM 0x\
  120. 4D5A90000300000004000000FFFF0000B80000000000000040000000000000000000000000000000000000000000000000000000000000000000000080000000\
  121. 0E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000\
  122. 504500004C010300A2270D570000000000000000E00002210B010B000008000000060000000000008E2700000020000000400000000000100020000000020000\
  123. 040000000000000004000000000000000080000000020000C5670000030040850000100000100000000010000010000000000000100000000000000000000000\
  124. 3C2700004F000000004000008803000000000000000000000000000000000000006000000C000000042600001C00000000000000000000000000000000000000\
  125. 00000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002E74657874000000\
  126. 94070000002000000008000000020000000000000000000000000000200000602E72737263000000880300000040000000040000000A00000000000000000000\
  127. 00000000400000402E72656C6F6300000C0000000060000000020000000E00000000000000000000000000004000004200000000000000000000000000000000\
  128. 70270000000000004800000002000500D02000003405000009000000000000000000000000000000502000008000000000000000000000000000000000000000\
  129. 0000000000000000000000000000000021825CA57CEFEAE870FEB0BE5DE042034E8CD55998648C18E2F34352CAE75AC234CE23DD8C72000718318C44021EEBE7\
  130. 30437D0422C4CA2C55E72B42121FF9FD7BD74E42DC5FBDEC84B1C89495E46D0E25E51CE297D53FBCDDDB187E0EA309D29679C18954E9777DA0613F550A3EDD6B\
  131. 6B718323B38BA79423DC10891A68BA8142534A4201000100000000000C00000076322E302E35303732370000000005006C0000005C010000237E0000C8010000\
  132. E001000023537472696E677300000000A80300000800000023555300B0030000100000002347554944000000C00300007401000023426C6F6200000000000000\
  133. 02000001071400000900000000FA253300160000010000000E000000010000000D0000000B000000010000000100000000000A00010000000000060031001F00\
  134. 06004E001F0006006B001F0006008A001F000600A3001F000600BC001F000600D7001F000600F2001F0006000B011F00060024011F000600540141012F006801\
  135. 00000600970177010600B70177010000000001000000000001000100090048000A00110048000A00190048000A00210048000A00290048000A00310048000A00\
  136. 390048000A00410048000A00490048000A00510048000A00590048000F00690048001500710048001A002E000B00C0002E001300CD002E001B00CD002E002300\
  137. D3002E002B00E9002E003300F8002E003B00CD002E00530037012E005B0042012E0063004B012E006B005401048000000100000000000000010000001E00D501\
  138. 000002000000000000000000000001001600000000000000003C4D6F64756C653E004B6579496E666F2E646C6C006D73636F726C69620053797374656D2E5265\
  139. 666C656374696F6E00417373656D626C795469746C65417474726962757465002E63746F7200417373656D626C794465736372697074696F6E41747472696275\
  140. 746500417373656D626C79436F6E66696775726174696F6E41747472696275746500417373656D626C79436F6D70616E7941747472696275746500417373656D\
  141. 626C7950726F6475637441747472696275746500417373656D626C79436F7079726967687441747472696275746500417373656D626C7954726164656D61726B\
  142. 41747472696275746500417373656D626C7943756C7475726541747472696275746500417373656D626C7956657273696F6E4174747269627574650041737365\
  143. 6D626C7946696C6556657273696F6E4174747269627574650053797374656D2E446961676E6F73746963730044656275676761626C6541747472696275746500\
  144. 446562756767696E674D6F6465730053797374656D2E52756E74696D652E436F6D70696C6572536572766963657300436F6D70696C6174696F6E52656C617861\
  145. 74696F6E734174747269627574650052756E74696D65436F6D7061746962696C697479417474726962757465004B6579496E666F000000000003200000000000\
  146. 6036241041F8144E90E76B3EC924FEF50008B77A5C561934E089042001010E05200101113104200101080320000180A000240000048000009400000006020000\
  147. 00240000525341310004000001000100179540030702B7AAA3C324F40B7D6E3FA4C86131039CF02103D5BEFCECB6EB8738A7103340555BD6806E222448420F9C\
  148. 6DA8EF1E9EB72D12328977819BE03687859DB5F1B577EA021E67C5AB440A86DBAE6AAD68ED0FFA2A55EFA5B8DE0BE377102E55FD2E4E8571EB7F5580965F88E5\
  149. A478C56CB8E3EC7ADDFEF48E1A7054B60C0100074B6579496E666F00000501000000001501001053716C205175616E74756D204C65617000000E010009435356\
  150. 50617273657200003E010039436F707972696768742028632920323031362053716C205175616E74756D204C6561702E20416C6C207269676874732072657365\
  151. 727665642E00000A010005312E302E3000000801000701000000000801000800000000001E01000100540216577261704E6F6E457863657074696F6E5468726F\
  152. 7773010000000000A2270D5700000000020000001C010000202600002008000052534453F9FB80892398AC4EBC9459538CBEE79301000000633A5C50686F656E\
  153. 697850726F6A6563745C41727469636C65735C5374616972776179546F53514C434C525C52656C617465645C50617273696E674353565C435356506172736572\
  154. 5C4B6579496E666F5C6F626A5C44656275675C4B6579496E666F2E70646200000000000000000000000000000000000000000000000000000000000000000000\
  155. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
  156. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064270000\
  157. 00000000000000007E27000000200000000000000000000000000000000000000000000070270000000000000000000000005F436F72446C6C4D61696E006D73\
  158. 636F7265652E646C6C0000000000FF25002000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
  159. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
  160. 00000000000000000000000000000100100000001800008000000000000000000000000000000100010000003000008000000000000000000000000000000100\
  161. 000000004800000058400000300300000000000000000000300334000000560053005F00560045005200530049004F004E005F0049004E0046004F0000000000\
  162. BD04EFFE00000100000001000000000000000100000000003F000000000000000400000002000000000000000000000000000000440000000100560061007200\
  163. 460069006C00650049006E0066006F00000000002400040000005400720061006E0073006C006100740069006F006E00000000000000B0049002000001005300\
  164. 7400720069006E006700460069006C00650049006E0066006F0000006C020000010030003000300030003000340062003000000044001100010043006F006D00\
  165. 700061006E0079004E0061006D00650000000000530071006C0020005100750061006E00740075006D0020004C00650061007000000000003800080001004600\
  166. 69006C0065004400650073006300720069007000740069006F006E00000000004B006500790049006E0066006F0000002C0006000100460069006C0065005600\
  167. 65007200730069006F006E000000000031002E0030002E003000000038000C00010049006E007400650072006E0061006C004E0061006D00650000004B006500\
  168. 790049006E0066006F002E0064006C006C00000098003A0001004C006500670061006C0043006F007000790072006900670068007400000043006F0070007900\
  169. 720069006700680074002000280063002900200032003000310036002000530071006C0020005100750061006E00740075006D0020004C006500610070002E00\
  170. 200041006C006C0020007200690067006800740073002000720065007300650072007600650064002E00000040000C0001004F0072006900670069006E006100\
  171. 6C00460069006C0065006E0061006D00650000004B006500790049006E0066006F002E0064006C006C00000034000A000100500072006F006400750063007400\
  172. 4E0061006D006500000000004300530056005000610072007300650072000000300006000100500072006F006400750063007400560065007200730069006F00\
  173. 6E00000031002E0030002E003000000038000800010041007300730065006D0062006C0079002000560065007200730069006F006E00000031002E0030002E00\
  174. 30002E00300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
  175. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
  176. 002000000C0000009037000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
  177. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
  178. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
  179. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
  180. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
  181. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
  182. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
  183. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  184.             WITH PERMISSION_SET = SAFE;
  185. ';
  186.         EXEC (@SQL);
  187.     END;
  188.  
  189.     SET @PublicKeyToken = CONVERT(VARBINARY(32), ASSEMBLYPROPERTY(@AssemblyName, 'PublicKey'));
  190.  
  191.     IF (NOT EXISTS(
  192.                 SELECT  *
  193.                 FROM        [sys].[asymmetric_keys] sak
  194.                 WHERE   sak.[thumbprint] = @PublicKeyToken
  195.             )
  196.         )
  197.     BEGIN
  198.         SET @SQL = N'
  199.         CREATE ASYMMETRIC KEY [' + @AsymmetricKeyName + N']
  200.             AUTHORIZATION [dbo]
  201.             FROM ASSEMBLY [' + @AssemblyName + N'];';
  202.         EXEC (@SQL);
  203.     END;
  204.  
  205.     SET @SQL = N'DROP ASSEMBLY [' + @AssemblyName + N'];';
  206.     EXEC (@SQL);
  207.  
  208.     COMMIT TRAN;
  209. END TRY
  210. BEGIN CATCH
  211.     IF (@@TRANCOUNT > 0)
  212.     BEGIN
  213.         ROLLBACK TRAN;
  214.     END;
  215.  
  216.     SET @ErrorMessage = ERROR_MESSAGE();
  217.     RAISERROR(@ErrorMessage, 16, 1);
  218.     RETURN; -- exit the script
  219. END CATCH;
  220.  
  221.  
  222. -- If the Asymmetric Key exists but the Login does not exist, we need to:
  223. -- 1) Create the Login
  224. -- 2) Grant the appropriate permission
  225. IF (EXISTS(
  226.             SELECT  *
  227.             FROM        [sys].[asymmetric_keys] sak
  228.             WHERE   sak.[thumbprint] = @PublicKeyToken
  229.         )
  230.     ) AND
  231.     (NOT EXISTS(
  232.             SELECT      *
  233.             FROM            [sys].[server_principals] sp
  234.             INNER JOIN  [sys].[asymmetric_keys] sak
  235.                     ON  sak.[sid] = sp.[sid]
  236.             WHERE   sak.[thumbprint] = @PublicKeyToken
  237.         )
  238.     )
  239. BEGIN
  240.     BEGIN TRY
  241.         BEGIN TRAN;
  242.  
  243.         SET @SQL = N'
  244.         CREATE LOGIN [' + @LoginName + N']
  245.             FROM ASYMMETRIC KEY [' + @AsymmetricKeyName + N'];';
  246.         EXEC (@SQL);
  247.  
  248.         SET @SQL = N'
  249.         -- GRANT EXTERNAL ACCESS ASSEMBLY TO [' + @LoginName + N'];
  250.         -- OR, comment out the GRANT statement above, and uncomment the following:
  251.         GRANT UNSAFE ASSEMBLY TO [' + @LoginName + N'];
  252.         ';
  253.         EXEC (@SQL);
  254.  
  255.         COMMIT TRAN;
  256.     END TRY
  257.     BEGIN CATCH
  258.         IF (@@TRANCOUNT > 0)
  259.         BEGIN
  260.             ROLLBACK TRAN;
  261.         END;
  262.  
  263.         SET @ErrorMessage = ERROR_MESSAGE();
  264.         RAISERROR(@ErrorMessage, 16, 1);
  265.         RETURN; -- exit the script
  266.     END CATCH;
  267. END;
  268. --------------------------------------------------------------------------------
  269. GO
  270.  
  271. --ALTER DATABASE [CSVParser] SET RECOVERY SIMPLE;
  272. GO
  273.  
  274. USE [CSVParser];
  275. GO
  276.  
  277.  
  278. ---------- BEGIN CLEANUP -----------
  279. IF (OBJECT_ID(N'dbo.GarbageCollect') IS NOT NULL)
  280. BEGIN
  281.     PRINT 'Dropping Stored Procedure: dbo.GarbageCollect...';
  282.     DROP PROCEDURE dbo.GarbageCollect;
  283. END;
  284.  
  285. IF (OBJECT_ID(N'dbo.ParseCSV') IS NOT NULL)
  286. BEGIN
  287.     PRINT 'Dropping Stored Procedure: dbo.ParseCSV...';
  288.     DROP PROCEDURE dbo.ParseCSV;
  289. END;
  290.  
  291. IF (EXISTS(SELECT * FROM sys.assemblies WHERE [name] = N'CSVParser'))
  292. BEGIN
  293.     PRINT 'Dropping Assembly: CSVParser...';
  294.     DROP ASSEMBLY [CSVParser];
  295. END;
  296. ---------- END CLEANUP -----------
  297.  
  298.  
  299. PRINT N'Creating [CSVParser]...';
  300. GO
  301. CREATE ASSEMBLY [CSVParser]
  302.     AUTHORIZATION [dbo]
  303.     FROM 0x\
  304. 4D5A90000300000004000000FFFF0000B80000000000000040000000000000000000000000000000000000000000000000000000000000000000000080000000\
  305. 0E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000\
  306. 504500004C010300BCFA10570000000000000000E00002210B010B000010000000060000000000008E2E00000020000000400000000000100020000000020000\
  307. 040000000000000004000000000000000080000000020000BBD80000030040850000100000100000000010000010000000000000100000000000000000000000\
  308. 382E000053000000004000009803000000000000000000000000000000000000006000000C000000002D00001C00000000000000000000000000000000000000\
  309. 00000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002E74657874000000\
  310. 940E0000002000000010000000020000000000000000000000000000200000602E72737263000000980300000040000000040000001200000000000000000000\
  311. 00000000400000402E72656C6F6300000C0000000060000000020000001600000000000000000000000000004000004200000000000000000000000000000000\
  312. 702E0000000000004800000002000500B0220000500A000009000000000000000000000000000000502000008000000000000000000000000000000000000000\
  313. 0000000000000000000000000000000041B793E22AD12F2EBFBA0A6DDA67A188CA3C256D99F6F303EEEBF3C507AC533E16D84E479B5E2F162686C00EF85674B0\
  314. EFBBCB6C62B69386B04F2B57056B0338AA3F6E1CEA0D3DAB330B5D2BBD8BD89DB9947E68491E31C2B1E0A7D7B36969899767D41FE8EF805DA2F6B908ED9403FA\
  315. 29B9E5BC38D8AF92F657375525AB884A1B300200BF000000010000110F00281000000A2C0717281100000A2A0F02281000000A2D3E0F02281200000A6F130000\
  316. 0A7E1400000A6F1500000A2D260F02281200000A731600000A0A060F00281200000A2802000006DE6B062C06066F1700000ADC0F01281000000A2D180F012812\
  317. 00000A6F1300000A7E1400000A6F1500000A2C0716281100000A2A0F01281200000A731800000A0B07731900000A0C080F00281200000A2802000006DE0A082C\
  318. 06086F1700000ADCDE0A072C06076F1700000ADC16281100000A2A000128000002003E000F4D000A00000000020093000FA2000A0000000002008C0022AE000A\
  319. 0000000013300500CF00000002000011160A140B160C02178D15000001130711071603A211076F1A00000A02176F1B00000A3892000000026F1C00000A0D062D\
  320. 55098E690C088D1900000113041613052B2A110411057201000070110517588C1A000001281D00000A1F0C281E00000A731F00000AA211051758130511050832\
  321. D11104732000000A0B282100000A076F2200000A170A07096F2300000A26098E69082F1A098E6913062B0E0711066F2400000A11061758130611060832ED2821\
  322. 00000A076F2500000A026F2600000A3963FFFFFF282100000A6F2700000A2A1A282800000A2A1E02282900000A2A000042534A4201000100000000000C000000\
  323. 76322E302E35303732370000000005006C00000024030000237E0000900300005004000023537472696E677300000000E00700001C00000023555300FC070000\
  324. 1000000023475549440000000C0800004402000023426C6F620000000000000002000001471502000900000000FA253300160000010000001F00000002000000\
  325. 0400000005000000290000001000000002000000010000000300000000000A00010000000000060031002A000A00590044000A00620044000E00A8008B000A00\
  326. FD00E20006003A01280106005101280106006E01280106008D0128010600A60128010600BF0128010600DA0128010600F501280106000E022801060027022801\
  327. 06005702440243006B02000006009A027A020600BA027A020A00E202E200060019032A00060032032A0006005003460306005D0346030A009F03E2000600AB03\
  328. 2A000A00C00338000A00CA03E2000A00D803E2000A00E303E200060045042A0000000000010000000000010001000100100018000000050001000100D0200000\
  329. 000096006C000A000100C421000000009100B8001E0004009F22000000009600C30025000600A622000000008618D2002900060000000100D800000002000F01\
  330. 000003001B0100000100240100000200D8002900D20029003100D20066003900D20066004100D20066004900D20066005100D20066005900D20066006100D200\
  331. 66006900D20066007100D20066007900D20066008100D2006B009100D20071009900D2002900A100D20029001900F8021D0111000303210119000F032701A900\
  332. 20032701A90025032B01A9002B032E012100D2006600B1003E032900B900D20066002100D2003301210068034201210076034801210094034D01A900B1035201\
  333. C900B8035801C900D2005C01E100D2006401E900EB036B01F100F4037001E10005047601E1000F047100F10019047001210028041D01F10036042900F9004804\
  334. 25000900D200290020007B00180124000B002D002E0023009C012E003300B8012E00730023022E0013008C012E001B009C012E002B00A2012E003B00C7012E00\
  335. 43009C012E005B0006022E00630011022E006B001A0244000B00400060007B00180164000B00530039017C01048000000100000000000000010000007600D802\
  336. 00000200000000000000000000000100210000000000020000000000000000000000010038000000000008000000000000000000000015007500000000000000\
  337. 003C4D6F64756C653E004353565061727365722E646C6C004353565574696C73006D73636F726C69620053797374656D004F626A6563740053797374656D2E44\
  338. 6174610053797374656D2E446174612E53716C54797065730053716C496E7433320053716C537472696E67005061727365435356004D6963726F736F66742E56\
  339. 697375616C4261736963004D6963726F736F66742E56697375616C42617369632E46696C65494F00546578744669656C64506172736572005061727365537475\
  340. 66660047617262616765436F6C6C656374002E63746F720044656C696D69746572004D6963726F736F66742E53716C5365727665722E5365727665720053716C\
  341. 466163657441747472696275746500496E707574537472696E670046696C6550617468004353560053797374656D2E5265666C656374696F6E00417373656D62\
  342. 6C795469746C6541747472696275746500417373656D626C794465736372697074696F6E41747472696275746500417373656D626C79436F6E66696775726174\
  343. 696F6E41747472696275746500417373656D626C79436F6D70616E7941747472696275746500417373656D626C7950726F647563744174747269627574650041\
  344. 7373656D626C79436F7079726967687441747472696275746500417373656D626C7954726164656D61726B41747472696275746500417373656D626C7943756C\
  345. 7475726541747472696275746500417373656D626C7956657273696F6E41747472696275746500417373656D626C7946696C6556657273696F6E417474726962\
  346. 7574650053797374656D2E446961676E6F73746963730044656275676761626C6541747472696275746500446562756767696E674D6F6465730053797374656D\
  347. 2E52756E74696D652E436F6D70696C6572536572766963657300436F6D70696C6174696F6E52656C61786174696F6E734174747269627574650052756E74696D\
  348. 65436F6D7061746962696C697479417474726962757465004353565061727365720053716C50726F636564757265417474726962757465006765745F49734E75\
  349. 6C6C006F705F496D706C69636974006765745F56616C756500537472696E67005472696D00456D70747900457175616C730049446973706F7361626C65004469\
  350. 73706F73650053797374656D2E494F00537472696E6752656164657200546578745265616465720053657444656C696D6974657273007365745F486173466965\
  351. 6C6473456E636C6F736564496E51756F74657300526561644669656C64730053716C4D6574614461746100496E74333200466F726D6174006765745F4D617800\
  352. 53716C4462547970650053716C446174615265636F72640053716C436F6E746578740053716C50697065006765745F506970650053656E64526573756C747353\
  353. 746172740053657456616C7565730053657444424E756C6C0053656E64526573756C7473526F77006765745F456E644F66446174610053656E64526573756C74\
  354. 73456E6400474300436F6C6C6563740000174600690065006C0064007B0030003A00440033007D0000000000CB70CB94BA6F2C478454C84DA3B55CDD0008B77A\
  355. 5C561934E0890A00031109110D110D110D08B03F5F7F11D50A3A0600020112110E030000010320000112010001005408074D617853697A650100000012010001\
  356. 005408074D617853697A65FFFFFFFF12010001005408074D617853697A65F4010000042001010E052001011145042001010880A0002400000480000094000000\
  357. 0602000000240000525341310004000001000100179540030702B7AAA3C324F40B7D6E3FA4C86131039CF02103D5BEFCECB6EB8738A7103340555BD6806E2224\
  358. 48420F9C6DA8EF1E9EB72D12328977819BE03687859DB5F1B577EA021E67C5AB440A86DBAE6AAD68ED0FFA2A55EFA5B8DE0BE377102E55FD2E4E8571EB7F5580\
  359. 965F88E5A478C56CB8E3EC7ADDFEF48E1A7054B60401000000032000020500011109080320000E02060E042001020E0520010112610807031211125D12110520\
  360. 01011D0E04200101020420001D0E0500020E0E1C0300000A072003010E116D0A062001011D12650400001279052001011271052001081D1C0F0708021271081D\
  361. 0E1D126508081D0E0F01000A4353562050617273657200000501000000001501001053716C205175616E74756D204C65617000000E0100094353565061727365\
  362. 7200003E010039436F707972696768742028632920323031362053716C205175616E74756D204C6561702E20416C6C207269676874732072657365727665642E\
  363. 00000A010005312E302E3000000801000200000000000801000800000000001E01000100540216577261704E6F6E457863657074696F6E5468726F7773010000\
  364. 00000000BCFA105700000000020000001C0100001C2D00001C0F000052534453ACA1E182C5F2824DB9145A484AD8672601000000633A5C50686F656E69785072\
  365. 6F6A6563745C41727469636C65735C5374616972776179546F53514C434C525C52656C617465645C50617273696E674353565C4353565061727365725C435356\
  366. 5061727365725C6F626A5C52656C656173655C4353565061727365722E7064620000000000000000000000000000000000000000000000000000000000000000\
  367. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
  368. 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602E000000000000\
  369. 000000007E2E0000002000000000000000000000000000000000000000000000702E000000000000000000000000000000005F436F72446C6C4D61696E006D73\
  370. 636F7265652E646C6C0000000000FF25002000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
  371. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
  372. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
  373. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
  374. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
  375. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
  376. 00000000000000000000000000000100100000001800008000000000000000000000000000000100010000003000008000000000000000000000000000000100\
  377. 000000004800000058400000400300000000000000000000400334000000560053005F00560045005200530049004F004E005F0049004E0046004F0000000000\
  378. BD04EFFE00000100000001000000000000000100000000003F000000000000000400000002000000000000000000000000000000440000000100560061007200\
  379. 460069006C00650049006E0066006F00000000002400040000005400720061006E0073006C006100740069006F006E00000000000000B004A002000001005300\
  380. 7400720069006E006700460069006C00650049006E0066006F0000007C020000010030003000300030003000340062003000000044001100010043006F006D00\
  381. 700061006E0079004E0061006D00650000000000530071006C0020005100750061006E00740075006D0020004C006500610070000000000040000B0001004600\
  382. 69006C0065004400650073006300720069007000740069006F006E00000000004300530056002000500061007200730065007200000000002C00060001004600\
  383. 69006C006500560065007200730069006F006E000000000031002E0030002E00300000003C000E00010049006E007400650072006E0061006C004E0061006D00\
  384. 650000004300530056005000610072007300650072002E0064006C006C00000098003A0001004C006500670061006C0043006F00700079007200690067006800\
  385. 7400000043006F0070007900720069006700680074002000280063002900200032003000310036002000530071006C0020005100750061006E00740075006D00\
  386. 20004C006500610070002E00200041006C006C0020007200690067006800740073002000720065007300650072007600650064002E00000044000E0001004F00\
  387. 72006900670069006E0061006C00460069006C0065006E0061006D00650000004300530056005000610072007300650072002E0064006C006C00000034000A00\
  388. 0100500072006F0064007500630074004E0061006D006500000000004300530056005000610072007300650072000000300006000100500072006F0064007500\
  389. 63007400560065007200730069006F006E00000031002E0030002E003000000038000800010041007300730065006D0062006C00790020005600650072007300\
  390. 69006F006E00000031002E0030002E0030002E003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
  391. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
  392. 002000000C000000903E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
  393. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
  394. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
  395. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
  396. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
  397. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
  398. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
  399. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  400.     WITH PERMISSION_SET = UNSAFE;
  401. GO
  402.  
  403.  
  404. PRINT N'Creating [dbo].[ParseCSV]...';
  405. GO
  406. CREATE PROCEDURE [dbo].[ParseCSV]
  407.     @Delimiter NVARCHAR(1) = N',',
  408.     @InputString NVARCHAR(MAX), -- can't specify default: https://connect.microsoft.com/SQLServer/feedback/details/1565637
  409.     @FilePath NVARCHAR(500) = NULL
  410. AS EXTERNAL NAME [CSVParser].[CSVUtils].[ParseCSV];
  411. GO
  412.  
  413.  
  414. PRINT N'Creating [dbo].[GarbageCollect]...';
  415. GO
  416. CREATE PROCEDURE [dbo].[GarbageCollect]
  417. AS EXTERNAL NAME [CSVParser].[CSVUtils].[GarbageCollect];
  418. GO
  419.  
  420. PRINT N'Install completed.';
  421.  
  422.  
  423. GO
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement