Я пытаюсь запросить столбец xml, используя выражение IN. Я не нашел родной путь XQuery делать такой запрос, поэтому я попробовал два обходных:Выполнение запроса IN с помощью XQuery в MSSQLServer 2005
Реализовать запрос в виде конкатенации ОШ, как это:
WHERE Data.exist('/Document/ParentKTMNode[text() = sql:variable("@Param1368320145") or text() = sql:variable("@Param2043685301") or ...
Реализовать Способ содержит (...), как это:: запрос с использованием струнного Fn
WHERE Data.exist('/Document/Field2[fn:contains(sql:variable("@Param1412022317"), .)]') = 1
Если данный параметр a (длинная) строка со значениями, разделенными символом "|"
Проблема в том, что версия 1. не работает более чем на 50 аргументов. Сервер выдает исключение из памяти. Версия 2. работает, но очень, очень медленно.
У кого-нибудь есть идея? Чтобы сформулировать проблему более полно: задайте список значений любого собственного типа sql, выберите все строки, столбец xml которых имеет одно из заданных значений в определенном поле в xml.
Это интересная идея. В моих тестах запросы выполняются очень быстро. Я не знаю, если я смогу реализовать это, так как ему нужен реальный стол, и мне нужно как-то вставить нужные мне ключи. Я не знаю, если это может поместиться в код, который я уже получил. Но, похоже, это определенно путь. – Mario