应该拆分字符串,然后使用内部联接。
对于2016年以下的SQL Server,通过XML拆分繁琐的字符串:
SELECT p.*
FROM products p
INNER JOIN (SELECT arg_xml_node.xml_node.value('(.)[1]', 'uniqueidentifier') uniqueidenfier
FROM (SELECT convert(xml,
concat('<x>',
replace('A9472294-CFDD-40AC-BC2D-00E39AF4A300, 9A817E40-E4B1-4487-A376-010DD6377E38, 078A3C75-C442-4D88-A1E0-0118B8706667',
', ',
'</x><x>'),
'</x>')) xml) arg_xml
CROSS APPLY arg_xml.xml.nodes('x') arg_xml_node (xml_node)) arg_uniqueidenfier
ON arg_uniqueidenfier.uniqueidenfier = p.productid;
以优雅的方式使用SQL Server 2016及更高版本
string_split()
:
SELECT p.*
FROM products p
INNER JOIN (SELECT convert(uniqueidentifier, ltrim(value)) uniqueidenfier
FROM string_split('A9472294-CFDD-40AC-BC2D-00E39AF4A300, 9A817E40-E4B1-4487-A376-010DD6377E38, 078A3C75-C442-4D88-A1E0-0118B8706667',
',')) arg_uniqueidenfier
ON arg_uniqueidenfier.uniqueidenfier = p.productid;
db<>fiddle