Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > автоматически редактировать select'ный запрос SQL


Автор: leniviy 31.12.2003, 14:31
MSSQL 2000
результатом запроса всегда является rowset , а источниками могут быть таблицы, вьюхи (причем, из разных баз данных), а также подзапросы. Вся схема сервера хранится в метабазе; физические имена объектов и полей могут меняться.
Нужен такой формат хранения запроса и алгоритм обращения с ним, чтобы прога-просмотрщик данных могла на автомате составлять текст запроса, добавлять фильтры, группировать и брать аггрегирующие функции, добавлять и удалять из запроса ненужные элементы.

спрашивается, зачем все это надо? Требования безопасности. Например, надо для конкретного пользователя сделать доступными только некоторые записи из таблицы "T1", а изначально аользователь пра вообще не имеет. тогда придется вместо того, чтоб давать на эту таблицу права, создать вьюху с уникальным именем, например, "V@453635usr33453" в которую попадут только отфильтрованные записи, потом вместо исходного запроса передать программе-клиенту запрос
Код
select V@453635usr33453.a as field344, V@453635usr33453.b as field 331 from V@453635usr33453
Вполне возможно, что понадобится сосчитать количество записей или применить фильтр или объединить этот запрос с другим. Если изначально работать с текстом, то придется писать или искать транслятор SQL, который в итоге приведет запрос к удобной, для редактирования форме. Я не знаю, существуют ли такие форматы, потому что во всех исходниках программ, которые я видел, анализ SQL на очень примитивном уровне: берется строка, ищется ключевое слово, отрезается/добавляется; если где нужный пробел или скобочка не стоит, получается глюк.
Уверен, такая штука была бы полезна многим программистам. Может, я один о ней не знаю.
З. Ы. Если хватило терпения дочитать, прими поздравление с Новым Годом

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)