Я принял эту функцию из https://stackoverflow.com/a/9714484/1678652Отсутствуют разрешения на выполнение XML?
SET @XML = N'<root><r>' + REPLACE(@s, @sep, '</r><r>') + '</r></root>'
INSERT INTO @result(Id)
SELECT DISTINCT r.value('.','int') as Item
FROM @xml.nodes('//root//r') AS RECORDS(r)
Он принимает строку и расщепляется в таблицу т-й элемент в каждой строке. Он работает, когда я тестирую его в SSMS, но когда я его вызываю из websserver (php/pdo), он возвращает пустой набор результатов.
Я думаю, что это должно быть что-то с разрешениями на XML, потому что если я позволю функции добавлять жестко заданные результаты в таблицу, то я получаю результаты обратно на php.
Если я жестко задал параметры функции, я делаю не получить результат для php, и я могу изменить функцию, чтобы просто вернуть параметры, поэтому это не проблема ввода.
Интересно, если это уместно:
http://beingoyen.blogspot.dk/2009/06/tsql-error-execute-permission-denied-on.html
Решение было простым: GRANT EXECUTE ON XML Schema COLLECTION :: {XMLSchema1} {К} RestrictedLoginName
Но как будет вызываться эта коллекция XML Schema? В SSMS я могу просматривать объекты типа коллекции XML Schema для добавления разрешений пользователю, но нет объектов этого типа.
Я предоставил пользователю все права на эту функцию.