Ответ 1
Добавьте в начале вашего динамического сквозного запроса следующее:
SET NoCount ON
и вы сможете использовать запрос из MS Access.
Почему это работает, мне придется уйти, чтобы другие объясняли, но я знаю, что это работает.
Рассмотрим следующий код.
DECLARE @sql VARCHAR(MAX)
SELECT @sql = 'SELECT * FROM caseinformation'
EXEC(@sql)
Когда я запускаю это в SSMS, он отображает те же результаты, что и при запуске SELECT * FROM caseinformation
. Но когда я запускаю это как сквозной запрос доступа, я получаю следующее сообщение об ошибке:
Проходной запрос с атрибутом ReturnsRecords, установленным в True, не возвращал никаких записей.
Что дает?
Добавьте в начале вашего динамического сквозного запроса следующее:
SET NoCount ON
и вы сможете использовать запрос из MS Access.
Почему это работает, мне придется уйти, чтобы другие объясняли, но я знаю, что это работает.
Это объяснение неверно:
Заявление о том, что Access жаловалось, было на самом деле SELECT @sql =, который выглядит как оператор select, но не вернуть набор записей. Когда вы говорите "SET NOCOUNT ON", это отключает Свойство ReturnsRecords, которое вызывает доступ к отказу запроса.
... поскольку это не то, что происходит.
Более подробное объяснение заключается в том, что SQL Server может возвращать несколько результатов из запроса или вызова хранимой процедуры. Эти результирующие наборы - это не все наборы записей и могут быть комбинацией скалярных значений и наборов строк. Когда Set NoCount выключен, SQL Server возвращает последовательно, набор строк, а затем количество записей BOTH на вызывающий код. Поскольку VBA не ищет это сложное сочетание значений вершин скалярного и набора записей, исходная ошибка возникает (потому что скалярное значение фактически возвращается в TOP из наборов результатов, то есть FIRST).
Когда в SQL Server выполняется Set NoCount ON, это говорит SQL Server просто не возвращать счет как часть набора результатов. Это приводит к тому, что Access/VBA/DAO может распознавать набор результатов как набор записей (даже если это фактически набор записей), а затем все работает так, как ожидалось.
попробуйте указать ваши столбцы вместо *