У меня есть следующий запрос, и мне нужен запрос для извлечения данных из SomeTable на основе критериев фильтра, присутствующих в Someothertable. Если в SomeOtherTable Query ничего нет, я должен вернуть все данные, имеющиеся в SomeTable
SQL SERVER 2005
SomeOtherTable не имеет индексов или ограничений. Все поля имеют тип char (50)
Следующий запрос отлично работает для моих требований, но он вызывает проблемы с производительностью, когда у меня много параметров.
В связи с некоторыми требованиями Клиента, мы должны хранить все данные предложения Where в SomeOtherTable. в зависимости от subid данные будут объединены с одним из столбцов в SomeTable.
Например, запрос может быть
SELECT
*
FROM
SomeTable
WHERE
1=1
AND
(
SomeTable.ID in (SELECT DISTINCT ID FROM SomeOtherTable WHERE Name = 'ABC' and subid = 'EF')
OR
0=(SELECT Count(1) FROM SomeOtherTable WHERE spName = 'ABC' and subid = 'EF')
)
AND
(
SomeTable.date =(SELECT date FROM SomeOtherTable WHERE Name = 'ABC' and subid = 'Date')
OR
0=(SELECT Count(1) FROM SomeOtherTable WHERE spName = 'ABC' and subid = 'Date')
)
EDIT ----------------------------------------------
Думаю, мне придется подробно объяснить мою проблему:
Мы разработали приложение ASP.net, которое используется для вызова параметризованных отчетов кристаллов, параметры в отчеты кристаллов не передаются с использованием метода отчетов кристаллов по умолчанию.
В приложении ASP.net мы создали мастера, которые используются для передачи параметров в отчеты. Эти параметры не напрямую используются отчетом Crystal, но используются запросом, встроенным в отчет Crystal, или процедурой Stored, используемой в Хрустальный отчет.
Это достигается с помощью таблицы (SomeOtherTable), в которой хранятся данные параметров, пока выполняется отчет, после которого данные удаляются, поэтому мы можем предположить, что SomeOtherTable имеет максимум 2-3 строки в любой заданный момент времени.
Так что если мы посмотрим на вышеупомянутый запрос, начальная часть запроса может быть принята как запрос отчета, а предложение where используется для получения пользовательского ввода из таблицы SomeOtherTable.
Так что я не думаю, что будет полезно создавать индексы и т. Д. (Может быть, я ошибаюсь).