Это работает в SQL. Объявите в вашей GetSomething
процедуре переменную типа XML следующим образом:
DECLARE @NameArray XML = NULL
В теле хранимой процедуры реализовано следующее:
SELECT * FROM MyTbl WHERE name IN (SELECT ParamValues.ID.value('.','VARCHAR(10)')
FROM @NameArray.nodes('id') AS ParamValues(ID))
Из кода SQL, который вызывает SP для объявления и инициализации переменной XML перед вызовом хранимой процедуры:
DECLARE @NameArray XML
SET @NameArray = '<id><</id>id>Name_1<<id>/id></id><id><</id>id>Name_2<<id>/id></id><id><</id>id>Name_3<<id>/id></id><id><</id>id>Name_4<<id>/id></id>'
Используя ваш пример, вызов хранимой процедуры будет:
EXEC GetSomething @NameArray
Я использовал этот метод раньше, и он отлично работает. Если вам нужен быстрый тест, скопируйте и вставьте следующий код в новый запрос и выполните:
DECLARE @IdArray XML
SET @IdArray = '<id><</id>id>Name_1<<id>/id></id><id><</id>id>Name_2<<id>/id></id><id><</id>id>Name_3<<id>/id></id><id><</id>id>Name_4<<id>/id></id>'
SELECT ParamValues.ID.value('.','VARCHAR(10)')
FROM @IdArray.nodes('id') AS ParamValues(ID)