Сохранить результат подзапроса для повторного использования - PullRequest
2 голосов
/ 09 января 2012

Используя ASP Classic и MS Access (не спрашивайте), как я могу временно сохранить результат подзапроса для повторного использования? Например, я хочу выполнить несколько запросов из моего сценария ASP, например:

SELECT stuff FROM (subquery) WHERE ... conditions

SELECT otherstuff FROM (subquery INNER JOIN othertable) WHERE ... different conditions

И отображать результаты каждого. Подзапрос одинаков в каждом случае, и его запуск довольно дорогой, поэтому я хотел бы запустить его только один раз. Каков наилучший способ сделать это?

Ответы [ 4 ]

3 голосов
/ 09 января 2012

Возможно, подойдет альтернативный подход?Вы можете применять фильтры к отключенным наборам записей, поэтому, возможно, ваш подзапрос мог бы использоваться как отключенный набор записей с более подробными фильтрами, примененными к этому набору.Некоторые заметки:

adOpenStatic = 3
adLockBatchOptimistic = 4
adUseClient = 3

Set rs = Server.CreateObject("ADODB.Recordset")
rs.CursorLocation = adUseClient

ssql = "SELECT * From Table1 WHERE SomeField = 'Text'"
rs.Open ssql, ocon, adOpenStatic, adLockBatchOptimistic

''Disconnect recordset
Set rs.ActiveConnection = Nothing

''Filter : http://www.w3schools.com/ado/prop_rs_filter.asp
rs.Filter = "Code LIKE 'a%'"

Do While Not rs.EOF
    Response.Write rs.Fields("Code") & "<br>"
    rs.MoveNext
Loop

rs.Filter = "Code LIKE 'c%'"

Do While Not rs.EOF
    Response.Write rs.Fields("Code") & "<br>"
    rs.MoveNext
Loop
1 голос
/ 09 января 2012

Когда вы имеете в виду «магазин», вы имеете в виду физически или логически?

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

Однако вы можете логически «сохранить» SQL запроса как VIEW запрашивается несколько раз:

CREATE VIEW MyView AS <subquery here>;

SELECT stuff FROM MyView WHERE <conditions here>;

SELECT otherstuff FROM MyView WHERE <different conditions here>;

ОБНОВЛЕНИЕ:

Для использования CREATE VIEW требуется, чтобы механизм находился в Режим запроса ANSI-92 , напримериспользуйте объект ADO Connection для выполнения SQL.Результатом оператора CREATE VIEW будет объект Query в пользовательском интерфейсе Access, поэтому, если вы предпочитаете не изменять режим запроса ANSI вашего пользовательского интерфейса, просто создайте объект Query обычным способом;)

1 голос
/ 09 января 2012

Я бы сказал, что лучше всего было бы вставить результаты вашего подзапроса во временную таблицу, а затем выбирать ее, пока вы не закончите с этими результатами.

INSERT INTO tmp_subQuery (col1, col2, ....) SELECT col1, col2, ... FROM... 

SELECT stuff from tmp_subQuery WHERE ... conditions
SELECT otherstuff from tmp_subQuery WHERE ... different conditions
0 голосов
/ 09 января 2012

Создайте DataTable для хранения результатов подзапроса и используйте Linq для создания и обработки наборов результатов для каждого запроса.

...