Существует устаревшее приложение, которое использует таблицу для преобразования имен заданий в имена файлов. Это устаревшее приложение запрашивает его следующим образом:
SELECT filename FROM aJobTable WHERE jobname = 'myJobName'
Но на самом деле эти имена заданий всегда совпадают с именами файлов (например, «myJobName.job» — это имя задания, но также и имя файла). Из-за этого эта таблица кажется ненужной. Но, к сожалению, мы не можем изменить код этой программы, а программе достаточно выбрать его из таблицы.
Это на самом деле немного раздражает. Потому что нам нужно синхронизировать эту базу данных. Если имя задания отсутствует в таблице, его нельзя использовать. Так что, как наш единственный выход, прямо сейчас у нас есть несколько vbscripts для синхронизации этой таблицы, добавляя записи для каждого возможного имени файла. В итоге в таблице всего 2 столбца с одинаковыми значениями. -- Мы хотим избавиться от этого.
Итак, мы мечтали о каком-нибудь хаке, который запрашивает данные с именем задания, но просто всегда возвращает имя задания снова, как запрос копирования/зеркала. Тогда нам на самом деле не нужно заполнять таблицу вообще.
Подвиги
Следующие можно настроить в этом устаревшем приложении. Я подозреваю, что это может открыть дверь для некоторых трюков/хаков.
- использование либо MS Access, либо SQL Server (мы предпочитаем sql server)
- Имя таблицы (например,
aJobTable
) - Имя столбца имени файла (например,
filename
) - Имя столбца имени задания (например,
jobname
)
Вот что я придумал:
Если я создам функция с табличным значением mirror(a)
, то я довольно близко подхожу к тому, что хочу. Тогда я мог бы использовать его как
SELECT filename FROM mirror('MyJobName.job')
Но этого недостаточно, было бы, если бы я мог заставить его быть таким
SELECT filename FROM mirror WHERE param1 = 'MyJobName.job'
К сожалению, я не думаю, что можно вызывать такие функции.
Итак, мне было интересно, может быть, кто-то еще знает, как заставить его работать.
Итак, мой вопрос: Как вы можете создать таблицу (или другой объект), которая всегда возвращает значение, переданное в ее предложение WHERE, например зеркало.
WHERE
в любом объекте. Я понимаю проблему, но иногда (и я делаю это снова и снова) лучше всего потратить время на переписывание унаследованного кода. - person gotqn   schedule 13.11.2018select A from B where C = 'D'
. Если он просто объединяет его, а не параметризует, вы можете попробовать SQL-инъекцию. - person Nick.McDermaid   schedule 13.11.2018select Dummyfield1 from EmptyTable where Dummyfield2 = '' UNION ALL SELECT 'The Real Value';
- person Nick.McDermaid   schedule 13.11.2018filename
как (виртуальный) вычисляемый столбец, возвращающий значениеjobname
? - person a_horse_with_no_name   schedule 13.11.2018