У меня есть столбец XML в моей таблице SQL Server 2008. То, что я пытаюсь сделать, заключается в том, что для данного параметра моя хранимая процедура вычеркивает любые пробелы (используя REPLACE
) в параметре и использует это в критериях WHERE
, но затем с использованием предложения XQuery exist также использует метод REPLACE
для данных xml :Запрос данных XML в SQL Server с использованием замены в критериях
-- Add the parameters for the stored procedure here
@PostCode varchar(20) = ''
AS
BEGIN
-- strip out any spaces from the post code param
SET @PostCode = REPLACE(@PostCode, ' ','')
SELECT TOP 1 *
FROM sd_LocalAuthorities
WHERE PostCodes.exist(N'REPLACE(/PostCodes/PostCode/text(), '' '','''')[. = sql:variable("@PostCode")]') = 1
END
Я получаю сообщение об ошибке при XQuery sd_LocalAuthorities.PostCodes.exist()
Там нет функции «{http://www.w3.org/2004/07/xpath-functions}: REPLACE()
при запуске процедуры. Есть ли альтернативы REPLACE()
Я могу использовать для выделения пробелов только для этого критерия WHERE
, я не хочу изменять таблицу.
Функция Exist нуждается в выражении XQuery в качестве параметра, а не в функции T-SQL. Рабочий, но неэффективный метод заключается в том, чтобы использовать PostCodes как varchar, заменять двойные пробелы и отличать как xml. – EKOlog
Спасибо за указатель Я пробовал это, и, как вы говорите, он не очень эффективен, он занимает 10 секунд плюс для выполнения запроса – user3783297