Last active
April 18, 2019 09:57
-
-
Save ststeiger/55b6f8bb8921cceef5e4 to your computer and use it in GitHub Desktop.
Multi-Value Parameter directly in SQL from string.Join(array, ",")
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| CREATE FUNCTION [dbo].[tfu_RPT_SEL_FromXML] | |
| ( | |
| @in_xml xml | |
| ) | |
| RETURNS TABLE | |
| AS | |
| RETURN | |
| ( | |
| SELECT tempNodes.innerXML.value('.', 'varchar(36)') AS val | |
| FROM @in_xml.nodes('e') AS tempNodes(innerXML) | |
| ) | |
| GO | |
| SELECT * FROM tfu_RPT_SEL_FromXML(CAST('<e>' + REPLACE('a,b,c', ',', '</e><e>') + '</e>' AS xml) ) | |
| SELECT * FROM tfu_RPT_SEL_FromXML('<e>foo</e><e>bar</e>') | |
| -- ---------------------------------------------- | |
| DECLARE @in_geschoss varchar(MAX) | |
| SET @in_geschoss = 'uid1,uid2,uid3' | |
| SELECT * FROM T_AP_Geschoss | |
| WHERE (1=1) | |
| AND T_AP_Geschoss.GS_UID IN | |
| ( | |
| SELECT val | |
| FROM tfu_RPT_SEL_FromXML | |
| ( | |
| CAST('<e>' + REPLACE(@in_geschoss, ',', '</e><e>') + '</e>' AS xml) | |
| ) | |
| ) | |
| -- ------------------------------------------------------------ | |
| DECLARE @uids varchar(MAX) | |
| SET @uids = '7B8240B4-F9E3-46DA-854A-04735F9CC46F,BC77931E-508B-4F3C-93CA-05B26C60BB1B,799E009D-94F5-4CCE-96C1-07B4C23CB13C,085051FB-0EF4-43F2-9887-08CA600834DE,80CF2F05-6E92-41B3-BF3C-0969BED4F590,AA6E70CF-A475-4358-B9D7-0A501F461274' | |
| -- http://stackoverflow.com/questions/14712864/how-to-query-values-from-xml-nodes | |
| -- Anstatt tfu_RPT_SEL_FromXML | |
| SELECT * FROM T_AP_Gebaeude | |
| WHERE GB_UID IN | |
| ( | |
| SELECT | |
| x.XmlCol.value('.', 'varchar(36)') AS val | |
| FROM | |
| ( | |
| SELECT | |
| CAST('<e>' + REPLACE(@uids, ',', '</e><e>') + '</e>' AS xml) AS RawXml | |
| ) AS b | |
| CROSS APPLY b.RawXml.nodes('e') x(XmlCol) | |
| ) | |
| ------- | |
| SELECT * | |
| FROM | |
| ( | |
| SELECT | |
| CAST('<e>' + REPLACE(@uids, ',', '</e><e>') + '</e>' AS xml) AS RawXml | |
| ) AS b | |
| ----------- | |
| SELECT | |
| --myTempTable.XmlCol.value('.', 'varchar(36)') AS val | |
| myTempTable.XmlCol.query('./ID').value('.', 'varchar(36)') AS ID | |
| ,myTempTable.XmlCol.query('./Name').value('.', 'nvarchar(MAX)') AS Name | |
| ,myTempTable.XmlCol.query('./RFC').value('.', 'nvarchar(MAX)') AS RFC | |
| ,myTempTable.XmlCol.query('./Text').value('.', 'nvarchar(MAX)') AS Text | |
| ,myTempTable.XmlCol.query('./Desc').value('.', 'nvarchar(MAX)') AS Description | |
| FROM | |
| ( | |
| SELECT CONVERT(XML, BulkColumn) AS RawXml | |
| FROM OPENROWSET(BULK 'D:\stefan.steiger\Downloads\MyData.xml', SINGLE_BLOB) AS RowSetName | |
| ) AS b | |
| CROSS APPLY b.RawXml.nodes('//record') myTempTable(XmlCol); | |
| SELECT | |
| --myTempTable.XmlCol.value('.', 'varchar(36)') AS val | |
| myTempTable.XmlCol.query('./ID').value('.', 'varchar(36)') AS ID | |
| ,myTempTable.XmlCol.query('./Name').value('.', 'nvarchar(MAX)') AS Name | |
| ,myTempTable.XmlCol.query('./RFC').value('.', 'nvarchar(MAX)') AS RFC | |
| ,myTempTable.XmlCol.query('./Text').value('.', 'nvarchar(MAX)') AS Text | |
| ,myTempTable.XmlCol.query('./Desc').value('.', 'nvarchar(MAX)') AS Description | |
| --,myTempTable.XmlCol.value('(Desc)[1]', 'nvarchar(MAX)') AS DescMeth2 | |
| FROM | |
| ( | |
| SELECT | |
| CAST('<?xml version="1.0" encoding="UTF-8" standalone="yes"?> | |
| <data-set> | |
| <record> | |
| <ID>1</ID> | |
| <Name>A</Name> | |
| <RFC>RFC 1035[1]</RFC> | |
| <Text>Address record</Text> | |
| <Desc>Returns a 32-bit IPv4 address, most commonly used to map hostnames to an IP address of the host, but it is also used for DNSBLs, storing subnet masks in RFC 1101, etc.</Desc> | |
| </record> | |
| <record> | |
| <ID>2</ID> | |
| <Name>NS</Name> | |
| <RFC>RFC 1035[1]</RFC> | |
| <Text>Name server record</Text> | |
| <Desc>Delegates a DNS zone to use the given authoritative name servers</Desc> | |
| </record> | |
| </data-set> | |
| ' AS xml) AS RawXml | |
| ) AS b | |
| --CROSS APPLY b.RawXml.nodes('//record/ID') myTempTable(XmlCol); | |
| CROSS APPLY b.RawXml.nodes('//record') myTempTable(XmlCol); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment