Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- *** DO NOT USE IN PRODUCTION -- TESTING / DEMONSTRATION CODE ONLY ***
- This script relates to the following SQL Server Central Forum topic:
- Processing strings ( https://www.sqlservercentral.com/forums/topic/processing-strings )
- *** DO NOT USE IN PRODUCTION -- TESTING / DEMONSTRATION CODE ONLY ***
- The Assembly below is compiled against .NET Framework version 3.5 so that it will work in SQL Server 2008
- and newer (i.e. all versions that support SQLCLR outside of SQL Server 2005). The Assembly does require
- having a PERMISSION_SET of UNSAFE due to the TextFieldParser class having a Host Protection Attribute, but
- the database does not need to have TRUSTWORTHY set to ON since the Assembly is signed, an Asymmetric Key
- is created from the Assembly, and a Login is created from that Asymmetric Key and granted the appropriate
- permission.
- *** DO NOT USE IN PRODUCTION -- TESTING / DEMONSTRATION CODE ONLY ***
- The .NET / C# source code for the [ParseCSV] and [GarbageCollect] SQLCLR Stored Procedures is located at:
- https://pastebin.com/BY8F994R
- *** DO NOT USE IN PRODUCTION -- TESTING / DEMONSTRATION CODE ONLY ***
- A T-SQL script containing tests for the [ParseCSV] SQLCLR Stored Procedure is located at:
- https://pastebin.com/WGDkQTxt
- *** DO NOT USE IN PRODUCTION -- TESTING / DEMONSTRATION CODE ONLY ***
- Date: 2016-04-11
- Version: 1.0.0
- For more functions like this, please visit: https://SQLsharp.com
- Stairway to SQLCLR series: https://www.sqlservercentral.com/stairways/stairway-to-sqlclr
- Copyright (c) 2016 Sql Quantum Leap. All rights reserved.
- https://SqlQuantumLeap.com
- */
- SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON;
- SET NUMERIC_ROUNDABORT OFF;
- SET NOCOUNT ON;
- GO
- USE [master];
- GO
- -- DROP DATABASE [CSVParser];
- IF (DB_ID(N'CSVParser') IS NULL)
- BEGIN
- PRINT N'Creating DB: CSVParser...';
- DECLARE @DataPath NVARCHAR(500) = CONVERT(NVARCHAR(500), SERVERPROPERTY('InstanceDefaultDataPath'));
- DECLARE @LogPath NVARCHAR(500) = CONVERT(NVARCHAR(500), SERVERPROPERTY('InstanceDefaultLogPath'));
- EXEC('
- CREATE DATABASE [CSVParser]
- ON PRIMARY
- ( NAME = N''CSVParser'', FILENAME = N''' + @DataPath + N'CSVParser.mdf'', SIZE = 4160KB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ),
- FILEGROUP [UserData] DEFAULT
- ( NAME = N''CSVParser_UserData'', FILENAME = N''' + @DataPath + N'CSVParser_UserData.ndf'', SIZE = 512000KB, MAXSIZE = UNLIMITED, FILEGROWTH = 20480KB )
- LOG ON
- ( NAME = N''CSVParser_log'', FILENAME = N''' + @LogPath + N'CSVParser_log.ldf'' , SIZE = 512000KB, MAXSIZE = UNLIMITED, FILEGROWTH = 20480KB )
- COLLATE Latin1_General_100_CI_AS;
- ');
- END;
- GO
- -- Make sure "CLR Integration" feature is enabled.
- IF (EXISTS(
- SELECT sc.*
- FROM sys.configurations sc
- WHERE sc.[name] = N'clr enabled'
- AND sc.[value_in_use] = 0
- )
- )
- BEGIN
- EXEC sp_configure 'clr enabled', 1;
- RECONFIGURE;
- END;
- GO
- --------------------------------------------------------------------------------
- DECLARE @ErrorMessage NVARCHAR(4000);
- -- We first need to create the Assembly containing just
- -- the Key info so that we can get the "thumbprint" /
- -- "publickeytoken" value from it. That value is used to
- -- determine if the Asymmetric Key and Login already exist.
- --
- -- We only need this Assembly temporarily, so create within
- -- a transaction to guarantee cleanup if something fails.
- DECLARE @AssemblyName sysname, -- keep lower-case for servers with case-sensitive / binary collations
- @AsymmetricKeyName sysname, -- keep lower-case for servers with case-sensitive / binary collations
- @LoginName sysname, -- keep lower-case for servers with case-sensitive / binary collations
- @PublicKeyToken VARBINARY(32),
- @SQL NVARCHAR(MAX);
- SET @AssemblyName = N'$ParseCSV-TEMPORARY-KeyInfo$';
- SET @AsymmetricKeyName = N'ParseCSV_PermissionKey';
- SET @LoginName = N'ParseCSV_PermissionLogin';
- BEGIN TRY
- BEGIN TRAN;
- IF (NOT EXISTS(
- SELECT *
- FROM [sys].[assemblies] sa
- WHERE [sa].[name] = @AssemblyName
- )
- )
- BEGIN
- SET @SQL = N'
- CREATE ASSEMBLY [' + @AssemblyName + N']
- AUTHORIZATION [dbo]
- FROM 0x\
- 4D5A90000300000004000000FFFF0000B80000000000000040000000000000000000000000000000000000000000000000000000000000000000000080000000\
- 0E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000\
- 504500004C010300A2270D570000000000000000E00002210B010B000008000000060000000000008E2700000020000000400000000000100020000000020000\
- 040000000000000004000000000000000080000000020000C5670000030040850000100000100000000010000010000000000000100000000000000000000000\
- 3C2700004F000000004000008803000000000000000000000000000000000000006000000C000000042600001C00000000000000000000000000000000000000\
- 00000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002E74657874000000\
- 94070000002000000008000000020000000000000000000000000000200000602E72737263000000880300000040000000040000000A00000000000000000000\
- 00000000400000402E72656C6F6300000C0000000060000000020000000E00000000000000000000000000004000004200000000000000000000000000000000\
- 70270000000000004800000002000500D02000003405000009000000000000000000000000000000502000008000000000000000000000000000000000000000\
- 0000000000000000000000000000000021825CA57CEFEAE870FEB0BE5DE042034E8CD55998648C18E2F34352CAE75AC234CE23DD8C72000718318C44021EEBE7\
- 30437D0422C4CA2C55E72B42121FF9FD7BD74E42DC5FBDEC84B1C89495E46D0E25E51CE297D53FBCDDDB187E0EA309D29679C18954E9777DA0613F550A3EDD6B\
- 6B718323B38BA79423DC10891A68BA8142534A4201000100000000000C00000076322E302E35303732370000000005006C0000005C010000237E0000C8010000\
- E001000023537472696E677300000000A80300000800000023555300B0030000100000002347554944000000C00300007401000023426C6F6200000000000000\
- 02000001071400000900000000FA253300160000010000000E000000010000000D0000000B000000010000000100000000000A00010000000000060031001F00\
- 06004E001F0006006B001F0006008A001F000600A3001F000600BC001F000600D7001F000600F2001F0006000B011F00060024011F000600540141012F006801\
- 00000600970177010600B70177010000000001000000000001000100090048000A00110048000A00190048000A00210048000A00290048000A00310048000A00\
- 390048000A00410048000A00490048000A00510048000A00590048000F00690048001500710048001A002E000B00C0002E001300CD002E001B00CD002E002300\
- D3002E002B00E9002E003300F8002E003B00CD002E00530037012E005B0042012E0063004B012E006B005401048000000100000000000000010000001E00D501\
- 000002000000000000000000000001001600000000000000003C4D6F64756C653E004B6579496E666F2E646C6C006D73636F726C69620053797374656D2E5265\
- 666C656374696F6E00417373656D626C795469746C65417474726962757465002E63746F7200417373656D626C794465736372697074696F6E41747472696275\
- 746500417373656D626C79436F6E66696775726174696F6E41747472696275746500417373656D626C79436F6D70616E7941747472696275746500417373656D\
- 626C7950726F6475637441747472696275746500417373656D626C79436F7079726967687441747472696275746500417373656D626C7954726164656D61726B\
- 41747472696275746500417373656D626C7943756C7475726541747472696275746500417373656D626C7956657273696F6E4174747269627574650041737365\
- 6D626C7946696C6556657273696F6E4174747269627574650053797374656D2E446961676E6F73746963730044656275676761626C6541747472696275746500\
- 446562756767696E674D6F6465730053797374656D2E52756E74696D652E436F6D70696C6572536572766963657300436F6D70696C6174696F6E52656C617861\
- 74696F6E734174747269627574650052756E74696D65436F6D7061746962696C697479417474726962757465004B6579496E666F000000000003200000000000\
- 6036241041F8144E90E76B3EC924FEF50008B77A5C561934E089042001010E05200101113104200101080320000180A000240000048000009400000006020000\
- 00240000525341310004000001000100179540030702B7AAA3C324F40B7D6E3FA4C86131039CF02103D5BEFCECB6EB8738A7103340555BD6806E222448420F9C\
- 6DA8EF1E9EB72D12328977819BE03687859DB5F1B577EA021E67C5AB440A86DBAE6AAD68ED0FFA2A55EFA5B8DE0BE377102E55FD2E4E8571EB7F5580965F88E5\
- A478C56CB8E3EC7ADDFEF48E1A7054B60C0100074B6579496E666F00000501000000001501001053716C205175616E74756D204C65617000000E010009435356\
- 50617273657200003E010039436F707972696768742028632920323031362053716C205175616E74756D204C6561702E20416C6C207269676874732072657365\
- 727665642E00000A010005312E302E3000000801000701000000000801000800000000001E01000100540216577261704E6F6E457863657074696F6E5468726F\
- 7773010000000000A2270D5700000000020000001C010000202600002008000052534453F9FB80892398AC4EBC9459538CBEE79301000000633A5C50686F656E\
- 697850726F6A6563745C41727469636C65735C5374616972776179546F53514C434C525C52656C617465645C50617273696E674353565C435356506172736572\
- 5C4B6579496E666F5C6F626A5C44656275675C4B6579496E666F2E70646200000000000000000000000000000000000000000000000000000000000000000000\
- 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
- 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064270000\
- 00000000000000007E27000000200000000000000000000000000000000000000000000070270000000000000000000000005F436F72446C6C4D61696E006D73\
- 636F7265652E646C6C0000000000FF25002000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
- 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
- 00000000000000000000000000000100100000001800008000000000000000000000000000000100010000003000008000000000000000000000000000000100\
- 000000004800000058400000300300000000000000000000300334000000560053005F00560045005200530049004F004E005F0049004E0046004F0000000000\
- BD04EFFE00000100000001000000000000000100000000003F000000000000000400000002000000000000000000000000000000440000000100560061007200\
- 460069006C00650049006E0066006F00000000002400040000005400720061006E0073006C006100740069006F006E00000000000000B0049002000001005300\
- 7400720069006E006700460069006C00650049006E0066006F0000006C020000010030003000300030003000340062003000000044001100010043006F006D00\
- 700061006E0079004E0061006D00650000000000530071006C0020005100750061006E00740075006D0020004C00650061007000000000003800080001004600\
- 69006C0065004400650073006300720069007000740069006F006E00000000004B006500790049006E0066006F0000002C0006000100460069006C0065005600\
- 65007200730069006F006E000000000031002E0030002E003000000038000C00010049006E007400650072006E0061006C004E0061006D00650000004B006500\
- 790049006E0066006F002E0064006C006C00000098003A0001004C006500670061006C0043006F007000790072006900670068007400000043006F0070007900\
- 720069006700680074002000280063002900200032003000310036002000530071006C0020005100750061006E00740075006D0020004C006500610070002E00\
- 200041006C006C0020007200690067006800740073002000720065007300650072007600650064002E00000040000C0001004F0072006900670069006E006100\
- 6C00460069006C0065006E0061006D00650000004B006500790049006E0066006F002E0064006C006C00000034000A000100500072006F006400750063007400\
- 4E0061006D006500000000004300530056005000610072007300650072000000300006000100500072006F006400750063007400560065007200730069006F00\
- 6E00000031002E0030002E003000000038000800010041007300730065006D0062006C0079002000560065007200730069006F006E00000031002E0030002E00\
- 30002E00300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
- 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
- 002000000C0000009037000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
- 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
- 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
- 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
- 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
- 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
- 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
- 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
- WITH PERMISSION_SET = SAFE;
- ';
- EXEC (@SQL);
- END;
- SET @PublicKeyToken = CONVERT(VARBINARY(32), ASSEMBLYPROPERTY(@AssemblyName, 'PublicKey'));
- IF (NOT EXISTS(
- SELECT *
- FROM [sys].[asymmetric_keys] sak
- WHERE sak.[thumbprint] = @PublicKeyToken
- )
- )
- BEGIN
- SET @SQL = N'
- CREATE ASYMMETRIC KEY [' + @AsymmetricKeyName + N']
- AUTHORIZATION [dbo]
- FROM ASSEMBLY [' + @AssemblyName + N'];';
- EXEC (@SQL);
- END;
- SET @SQL = N'DROP ASSEMBLY [' + @AssemblyName + N'];';
- EXEC (@SQL);
- COMMIT TRAN;
- END TRY
- BEGIN CATCH
- IF (@@TRANCOUNT > 0)
- BEGIN
- ROLLBACK TRAN;
- END;
- SET @ErrorMessage = ERROR_MESSAGE();
- RAISERROR(@ErrorMessage, 16, 1);
- RETURN; -- exit the script
- END CATCH;
- -- If the Asymmetric Key exists but the Login does not exist, we need to:
- -- 1) Create the Login
- -- 2) Grant the appropriate permission
- IF (EXISTS(
- SELECT *
- FROM [sys].[asymmetric_keys] sak
- WHERE sak.[thumbprint] = @PublicKeyToken
- )
- ) AND
- (NOT EXISTS(
- SELECT *
- FROM [sys].[server_principals] sp
- INNER JOIN [sys].[asymmetric_keys] sak
- ON sak.[sid] = sp.[sid]
- WHERE sak.[thumbprint] = @PublicKeyToken
- )
- )
- BEGIN
- BEGIN TRY
- BEGIN TRAN;
- SET @SQL = N'
- CREATE LOGIN [' + @LoginName + N']
- FROM ASYMMETRIC KEY [' + @AsymmetricKeyName + N'];';
- EXEC (@SQL);
- SET @SQL = N'
- -- GRANT EXTERNAL ACCESS ASSEMBLY TO [' + @LoginName + N'];
- -- OR, comment out the GRANT statement above, and uncomment the following:
- GRANT UNSAFE ASSEMBLY TO [' + @LoginName + N'];
- ';
- EXEC (@SQL);
- COMMIT TRAN;
- END TRY
- BEGIN CATCH
- IF (@@TRANCOUNT > 0)
- BEGIN
- ROLLBACK TRAN;
- END;
- SET @ErrorMessage = ERROR_MESSAGE();
- RAISERROR(@ErrorMessage, 16, 1);
- RETURN; -- exit the script
- END CATCH;
- END;
- --------------------------------------------------------------------------------
- GO
- --ALTER DATABASE [CSVParser] SET RECOVERY SIMPLE;
- GO
- USE [CSVParser];
- GO
- ---------- BEGIN CLEANUP -----------
- IF (OBJECT_ID(N'dbo.GarbageCollect') IS NOT NULL)
- BEGIN
- PRINT 'Dropping Stored Procedure: dbo.GarbageCollect...';
- DROP PROCEDURE dbo.GarbageCollect;
- END;
- IF (OBJECT_ID(N'dbo.ParseCSV') IS NOT NULL)
- BEGIN
- PRINT 'Dropping Stored Procedure: dbo.ParseCSV...';
- DROP PROCEDURE dbo.ParseCSV;
- END;
- IF (EXISTS(SELECT * FROM sys.assemblies WHERE [name] = N'CSVParser'))
- BEGIN
- PRINT 'Dropping Assembly: CSVParser...';
- DROP ASSEMBLY [CSVParser];
- END;
- ---------- END CLEANUP -----------
- PRINT N'Creating [CSVParser]...';
- GO
- CREATE ASSEMBLY [CSVParser]
- AUTHORIZATION [dbo]
- FROM 0x\
- 4D5A90000300000004000000FFFF0000B80000000000000040000000000000000000000000000000000000000000000000000000000000000000000080000000\
- 0E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000\
- 504500004C010300BCFA10570000000000000000E00002210B010B000010000000060000000000008E2E00000020000000400000000000100020000000020000\
- 040000000000000004000000000000000080000000020000BBD80000030040850000100000100000000010000010000000000000100000000000000000000000\
- 382E000053000000004000009803000000000000000000000000000000000000006000000C000000002D00001C00000000000000000000000000000000000000\
- 00000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002E74657874000000\
- 940E0000002000000010000000020000000000000000000000000000200000602E72737263000000980300000040000000040000001200000000000000000000\
- 00000000400000402E72656C6F6300000C0000000060000000020000001600000000000000000000000000004000004200000000000000000000000000000000\
- 702E0000000000004800000002000500B0220000500A000009000000000000000000000000000000502000008000000000000000000000000000000000000000\
- 0000000000000000000000000000000041B793E22AD12F2EBFBA0A6DDA67A188CA3C256D99F6F303EEEBF3C507AC533E16D84E479B5E2F162686C00EF85674B0\
- EFBBCB6C62B69386B04F2B57056B0338AA3F6E1CEA0D3DAB330B5D2BBD8BD89DB9947E68491E31C2B1E0A7D7B36969899767D41FE8EF805DA2F6B908ED9403FA\
- 29B9E5BC38D8AF92F657375525AB884A1B300200BF000000010000110F00281000000A2C0717281100000A2A0F02281000000A2D3E0F02281200000A6F130000\
- 0A7E1400000A6F1500000A2D260F02281200000A731600000A0A060F00281200000A2802000006DE6B062C06066F1700000ADC0F01281000000A2D180F012812\
- 00000A6F1300000A7E1400000A6F1500000A2C0716281100000A2A0F01281200000A731800000A0B07731900000A0C080F00281200000A2802000006DE0A082C\
- 06086F1700000ADCDE0A072C06076F1700000ADC16281100000A2A000128000002003E000F4D000A00000000020093000FA2000A0000000002008C0022AE000A\
- 0000000013300500CF00000002000011160A140B160C02178D15000001130711071603A211076F1A00000A02176F1B00000A3892000000026F1C00000A0D062D\
- 55098E690C088D1900000113041613052B2A110411057201000070110517588C1A000001281D00000A1F0C281E00000A731F00000AA211051758130511050832\
- D11104732000000A0B282100000A076F2200000A170A07096F2300000A26098E69082F1A098E6913062B0E0711066F2400000A11061758130611060832ED2821\
- 00000A076F2500000A026F2600000A3963FFFFFF282100000A6F2700000A2A1A282800000A2A1E02282900000A2A000042534A4201000100000000000C000000\
- 76322E302E35303732370000000005006C00000024030000237E0000900300005004000023537472696E677300000000E00700001C00000023555300FC070000\
- 1000000023475549440000000C0800004402000023426C6F620000000000000002000001471502000900000000FA253300160000010000001F00000002000000\
- 0400000005000000290000001000000002000000010000000300000000000A00010000000000060031002A000A00590044000A00620044000E00A8008B000A00\
- FD00E20006003A01280106005101280106006E01280106008D0128010600A60128010600BF0128010600DA0128010600F501280106000E022801060027022801\
- 06005702440243006B02000006009A027A020600BA027A020A00E202E200060019032A00060032032A0006005003460306005D0346030A009F03E2000600AB03\
- 2A000A00C00338000A00CA03E2000A00D803E2000A00E303E200060045042A0000000000010000000000010001000100100018000000050001000100D0200000\
- 000096006C000A000100C421000000009100B8001E0004009F22000000009600C30025000600A622000000008618D2002900060000000100D800000002000F01\
- 000003001B0100000100240100000200D8002900D20029003100D20066003900D20066004100D20066004900D20066005100D20066005900D20066006100D200\
- 66006900D20066007100D20066007900D20066008100D2006B009100D20071009900D2002900A100D20029001900F8021D0111000303210119000F032701A900\
- 20032701A90025032B01A9002B032E012100D2006600B1003E032900B900D20066002100D2003301210068034201210076034801210094034D01A900B1035201\
- C900B8035801C900D2005C01E100D2006401E900EB036B01F100F4037001E10005047601E1000F047100F10019047001210028041D01F10036042900F9004804\
- 25000900D200290020007B00180124000B002D002E0023009C012E003300B8012E00730023022E0013008C012E001B009C012E002B00A2012E003B00C7012E00\
- 43009C012E005B0006022E00630011022E006B001A0244000B00400060007B00180164000B00530039017C01048000000100000000000000010000007600D802\
- 00000200000000000000000000000100210000000000020000000000000000000000010038000000000008000000000000000000000015007500000000000000\
- 003C4D6F64756C653E004353565061727365722E646C6C004353565574696C73006D73636F726C69620053797374656D004F626A6563740053797374656D2E44\
- 6174610053797374656D2E446174612E53716C54797065730053716C496E7433320053716C537472696E67005061727365435356004D6963726F736F66742E56\
- 697375616C4261736963004D6963726F736F66742E56697375616C42617369632E46696C65494F00546578744669656C64506172736572005061727365537475\
- 66660047617262616765436F6C6C656374002E63746F720044656C696D69746572004D6963726F736F66742E53716C5365727665722E5365727665720053716C\
- 466163657441747472696275746500496E707574537472696E670046696C6550617468004353560053797374656D2E5265666C656374696F6E00417373656D62\
- 6C795469746C6541747472696275746500417373656D626C794465736372697074696F6E41747472696275746500417373656D626C79436F6E66696775726174\
- 696F6E41747472696275746500417373656D626C79436F6D70616E7941747472696275746500417373656D626C7950726F647563744174747269627574650041\
- 7373656D626C79436F7079726967687441747472696275746500417373656D626C7954726164656D61726B41747472696275746500417373656D626C7943756C\
- 7475726541747472696275746500417373656D626C7956657273696F6E41747472696275746500417373656D626C7946696C6556657273696F6E417474726962\
- 7574650053797374656D2E446961676E6F73746963730044656275676761626C6541747472696275746500446562756767696E674D6F6465730053797374656D\
- 2E52756E74696D652E436F6D70696C6572536572766963657300436F6D70696C6174696F6E52656C61786174696F6E734174747269627574650052756E74696D\
- 65436F6D7061746962696C697479417474726962757465004353565061727365720053716C50726F636564757265417474726962757465006765745F49734E75\
- 6C6C006F705F496D706C69636974006765745F56616C756500537472696E67005472696D00456D70747900457175616C730049446973706F7361626C65004469\
- 73706F73650053797374656D2E494F00537472696E6752656164657200546578745265616465720053657444656C696D6974657273007365745F486173466965\
- 6C6473456E636C6F736564496E51756F74657300526561644669656C64730053716C4D6574614461746100496E74333200466F726D6174006765745F4D617800\
- 53716C4462547970650053716C446174615265636F72640053716C436F6E746578740053716C50697065006765745F506970650053656E64526573756C747353\
- 746172740053657456616C7565730053657444424E756C6C0053656E64526573756C7473526F77006765745F456E644F66446174610053656E64526573756C74\
- 73456E6400474300436F6C6C6563740000174600690065006C0064007B0030003A00440033007D0000000000CB70CB94BA6F2C478454C84DA3B55CDD0008B77A\
- 5C561934E0890A00031109110D110D110D08B03F5F7F11D50A3A0600020112110E030000010320000112010001005408074D617853697A650100000012010001\
- 005408074D617853697A65FFFFFFFF12010001005408074D617853697A65F4010000042001010E052001011145042001010880A0002400000480000094000000\
- 0602000000240000525341310004000001000100179540030702B7AAA3C324F40B7D6E3FA4C86131039CF02103D5BEFCECB6EB8738A7103340555BD6806E2224\
- 48420F9C6DA8EF1E9EB72D12328977819BE03687859DB5F1B577EA021E67C5AB440A86DBAE6AAD68ED0FFA2A55EFA5B8DE0BE377102E55FD2E4E8571EB7F5580\
- 965F88E5A478C56CB8E3EC7ADDFEF48E1A7054B60401000000032000020500011109080320000E02060E042001020E0520010112610807031211125D12110520\
- 01011D0E04200101020420001D0E0500020E0E1C0300000A072003010E116D0A062001011D12650400001279052001011271052001081D1C0F0708021271081D\
- 0E1D126508081D0E0F01000A4353562050617273657200000501000000001501001053716C205175616E74756D204C65617000000E0100094353565061727365\
- 7200003E010039436F707972696768742028632920323031362053716C205175616E74756D204C6561702E20416C6C207269676874732072657365727665642E\
- 00000A010005312E302E3000000801000200000000000801000800000000001E01000100540216577261704E6F6E457863657074696F6E5468726F7773010000\
- 00000000BCFA105700000000020000001C0100001C2D00001C0F000052534453ACA1E182C5F2824DB9145A484AD8672601000000633A5C50686F656E69785072\
- 6F6A6563745C41727469636C65735C5374616972776179546F53514C434C525C52656C617465645C50617273696E674353565C4353565061727365725C435356\
- 5061727365725C6F626A5C52656C656173655C4353565061727365722E7064620000000000000000000000000000000000000000000000000000000000000000\
- 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
- 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000602E000000000000\
- 000000007E2E0000002000000000000000000000000000000000000000000000702E000000000000000000000000000000005F436F72446C6C4D61696E006D73\
- 636F7265652E646C6C0000000000FF25002000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
- 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
- 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
- 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
- 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
- 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
- 00000000000000000000000000000100100000001800008000000000000000000000000000000100010000003000008000000000000000000000000000000100\
- 000000004800000058400000400300000000000000000000400334000000560053005F00560045005200530049004F004E005F0049004E0046004F0000000000\
- BD04EFFE00000100000001000000000000000100000000003F000000000000000400000002000000000000000000000000000000440000000100560061007200\
- 460069006C00650049006E0066006F00000000002400040000005400720061006E0073006C006100740069006F006E00000000000000B004A002000001005300\
- 7400720069006E006700460069006C00650049006E0066006F0000007C020000010030003000300030003000340062003000000044001100010043006F006D00\
- 700061006E0079004E0061006D00650000000000530071006C0020005100750061006E00740075006D0020004C006500610070000000000040000B0001004600\
- 69006C0065004400650073006300720069007000740069006F006E00000000004300530056002000500061007200730065007200000000002C00060001004600\
- 69006C006500560065007200730069006F006E000000000031002E0030002E00300000003C000E00010049006E007400650072006E0061006C004E0061006D00\
- 650000004300530056005000610072007300650072002E0064006C006C00000098003A0001004C006500670061006C0043006F00700079007200690067006800\
- 7400000043006F0070007900720069006700680074002000280063002900200032003000310036002000530071006C0020005100750061006E00740075006D00\
- 20004C006500610070002E00200041006C006C0020007200690067006800740073002000720065007300650072007600650064002E00000044000E0001004F00\
- 72006900670069006E0061006C00460069006C0065006E0061006D00650000004300530056005000610072007300650072002E0064006C006C00000034000A00\
- 0100500072006F0064007500630074004E0061006D006500000000004300530056005000610072007300650072000000300006000100500072006F0064007500\
- 63007400560065007200730069006F006E00000031002E0030002E003000000038000800010041007300730065006D0062006C00790020005600650072007300\
- 69006F006E00000031002E0030002E0030002E003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
- 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
- 002000000C000000903E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
- 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
- 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
- 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
- 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
- 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
- 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
- 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
- WITH PERMISSION_SET = UNSAFE;
- GO
- PRINT N'Creating [dbo].[ParseCSV]...';
- GO
- CREATE PROCEDURE [dbo].[ParseCSV]
- @Delimiter NVARCHAR(1) = N',',
- @InputString NVARCHAR(MAX), -- can't specify default: https://connect.microsoft.com/SQLServer/feedback/details/1565637
- @FilePath NVARCHAR(500) = NULL
- AS EXTERNAL NAME [CSVParser].[CSVUtils].[ParseCSV];
- GO
- PRINT N'Creating [dbo].[GarbageCollect]...';
- GO
- CREATE PROCEDURE [dbo].[GarbageCollect]
- AS EXTERNAL NAME [CSVParser].[CSVUtils].[GarbageCollect];
- GO
- PRINT N'Install completed.';
- GO
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement