Вычисление выражения в SQL с помощью XQuery (без хранимой процедуры)

Я пытаюсь вычислить выражение в функции, и случается так, что XQuery не может получить строку из переменной SQL.

DECLARE @XML AS XML = ''
DECLARE @Formula AS NVARCHAR(MAX) = '1+1'
SELECT @XML.query(@Formula)

С использованием ...

SELECT @XML.query('sql:variable("@Formula")')

... просто возвращает строку 1+1, а не сумму.

Есть ли способ заставить это работать в SQL (без использования хранимых процедур, потому что они не будут выполняться внутри функции)?

Заранее спасибо!


person CubicsRube    schedule 15.05.2013    source источник
comment
Для оценки выражений в TSQL используется EXEC или sp_executesql, но ни один из них нельзя использовать в пользовательской функции (см. этот вопрос). Вы упомянули об использовании функции, но неясно, является ли это UDF TSQL или нет; если вы можете быть более точным в том, как вы выполняете этот код, тогда у кого-то может быть лучший ответ.   -  person Pondlife    schedule 15.05.2013
comment
@Podnlife Спасибо за ваш ответ. Итак, я предполагаю, что это должна быть либо 1) библиотека CLR, либо 2) хранимая процедура, либо 3) возвращать строку и заканчивать расчет в приложении (в моем случае это возможно). Нет способа сделать это в UDF. И да, это это пользовательская функция T-SQL :)   -  person CubicsRube    schedule 16.05.2013
comment
Да, это именно ваши варианты. Пользовательская функция TSQL не может изменять состояние базы данных, что имеет смысл, поскольку большинство люди не хотели бы, чтобы запрос типа select dbo.MyFunc(SomeColumn) from dbo.SomeTable также модифицировал данные.   -  person Pondlife    schedule 16.05.2013