2014-10-05 4 views
1

У меня возникла проблема с программным обеспечением, которое я настраиваю. У меня нет доступа к исходному коду, только конфиг.Попытка избежать переменной sp_executesql

Проблема заключается в следующем: в конфигурации программа ожидает, что я войду в строку, но я бы хотел, чтобы строка выскочила из сравнения и вместо этого выполнила funtion.

Использование SQL Profiler я получаю что-то вроде этого:

exec sp_executesql N'SELECT * FROM dummyTable WHERE (Name LIKE @Pattern)',N' 

Это не работает в моей установке, так как модель не ясно оп ределяется в развитых. Мне нужно взять переменную , переданную как шаблон, и запустить ее через sql-функцию, но я не могу понять, как это сделать. Обычно шаблон содержит один символ в моем примере «1». Я попытался изменить шаблон, чтобы использовать escape-символ и запустить на нем свою функцию, но я думаю, что мне не хватает информации (если это вообще возможно). Переменная Я отправить от конфигурации выглядит следующим образом:

{0}' or Name like dbo.RunCalulation({0}) 

Давая мне следующее:

'…@Pattern nvarchar(43)',@Pattern=N'1'' or Name like dbo.RunCalulation(1) ' 

Это выполняется, но не дает никакого ответа, поэтому я думаю, что Esacpe символ не работа, и он сравнивает всю строку с именем.

Я реальный застрял в этом, надеюсь, кто имеет хорошее представление о том, что делать (я знаю, что не имея исходный код является реальной проблемой здесь.

ответ

1

Одним из огромных преимуществ query parameters (например, @Pattern) является то, что они помогают protect againstSQL injection (который является то, что вы пытаетесь сделать).

Таким образом, ответ в том, что вы не можете делать то, что вы хотите. Там нет никакого способа, чтобы избежать параметра @Pattern и добавить некоторые из ваших собственных SQL к этому запросу, потому что все, что вы передаете как @Pattern, будет интерпретироваться как данные, и никогда не будет как текст команды SQL (что и является причиной ваш текст SQL заканчивается внутри одинарных кавычек и почему ваша цитата автоматически экранируется до ''.).

+0

привет, спасибо за быстрый ответ. Этого я и боялся. Думаю, я должен надеяться, что кто-то сможет выкопать старый код. – user3419063

 Смежные вопросы

  • Нет связанных вопросов^_^