tsql: невозможно выбрать <table>из proc - PullRequest
0 голосов
/ 01 февраля 2011

Я использую SQL Server 2008 и пытаюсь выполнить запрос

OPEN CUR_InvHeader
FETCH NEXT FROM CUR_InvHeader INTO 
    @CH_iBilling_Log_RecID
WHILE (@@FETCH_STATUS = 0) BEGIN        --Loop for Cur_InvHeader

select * into tarInvoiceDetail_201101 FROM OPENROWSET('SQLNCLI', 'Server=(local);Trusted_Connection=yes;',
     'EXEC _sp_cwm5_GetInvoiceDetail @CH_iBilling_Log_RecID')

Я получаю ошибку

Поставщик OLE DB "SQLNCLI10" для связанных сервер "(null)" вернул сообщение «Отложенная подготовка не может быть завершено. ".

Я запустил sp_configure 'ad hoc ..', 1 перенастроить с переопределением чтобы убедиться, что я могу запустить select для openrecordset

есть идеи, что я могу делать не так? заранее спасибо

1 Ответ

1 голос
/ 01 февраля 2011

Первое, что неправильно, это то, что ваш оператор "EXEC _sp_cwm5_GetInvoiceDetail @CH_iBilling_Log_RecID" будет оцениваться как константа, а не передавать значение @CH_iBilling_Log_RecID через OPENROWSET. Вам нужно заменить весь «SELECT * INTO ...» на строковую переменную и запустить для него процедуру sp_executesql.

Во-вторых, неправильно, что ваш оператор "select into" будет создавать tarInvoiceDetail_201101 каждый раз, когда INTO создает новую таблицу при запуске. Поэтому, если ваш курсор занимает более одной строки, вы получите ошибку при втором проходе.

Кроме того, что здесь означает "Server = (local)"? Вы пытаетесь использовать OPENROWSET для локальной копии SQL Server при подключении к удаленному серверу? Или вы пытаетесь использовать OPENROWSET, чтобы обойти ограничение, заключающееся в том, что вы не можете напрямую использовать хранимую процедуру в качестве источника для INSERT?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...