Я пытаюсь использовать таблицы #Temp в моем динамическом c SQL в Microsoft SQL Server 2014, и он работает нормально локально, но если я помещу его в OPENROWSET, чтобы я мог собирать данные с другого сервера , появляется сообщение об ошибке:
Поставщик OLE DB "SQLNCLI11" для связанного сервера "(null)" вернул сообщение «Отложенная подготовка не может быть завершена.». Сообщение 8180, уровень 16, состояние 1, строка 9 Заявление (я) не может быть подготовлено. Сообщение 208, Уровень 16, Состояние 1, Строка 9 Неверное имя объекта '# RefmdCodeList'
Это просто запрещено? Или есть какой-то другой способ, которым мне нужно это сделать?
Чтобы упростить проблему, вот два примера.
ЭТО РАБОТАЕТ:
declare @sql nvarchar(max)
set @sql = N' select * from #RefmdCodeList'
exec(@sql)
ЭТО НЕ РАБОТАЕТ:
declare @sql nvarchar(max)
set @sql = N' SELECT * FROM
OPENROWSET(''SQLNCLI'',
''Server=' + @PAFServer + ';Database=' +@PAFDatabase +';UID=p2kservices;PWD=P0werP@th!'',
N'' SELECT * from #RefmdCodeList'')'
exec(@sql)
Для людей, которые могут спросить, вот что Я действительно пытаюсь сделать. Если я удаляю таблицы #Temp, мой код, как написано ниже, работает нормально. С включенными таблицами #Temp я получаю сообщение об ошибке выше.
declare @sql nvarchar(max)
set @sql = N' SELECT * FROM OPENROWSET(''SQLNCLI'', ''Server=' + @PAFServer + ';Database=' +@PAFDatabase +';UID=p2kservices;PWD=P0werP@th!'',
N'' ;WITH spec_data (entity, accession_no, acc_id, spec_id, spec_description, spec_label, spec_sc_code) AS
(SELECT ''''PAMF'''' AS entity, a.accession_no, a.id, asp.id, asp.description, asp.specimen_label, substring(''''88''''+spec_sc.code, 1,5)
FROM accession_2 a (NOLOCK)
JOIN acc_specimen asp (nolock) ON asp.acc_id = a.id
LEFT OUTER JOIN acc_charges spec_ac (NOLOCK) on spec_ac.acc_id = asp.acc_id
AND spec_ac.rec_id = asp.id AND spec_ac.rec_type = ''''S''''
LEFT OUTER JOIN service_code spec_sc (NOLOCK) on spec_sc.id = spec_ac.service_code_id
JOIN acc_refmd aref (NOLOCK) ON aref.acc_id = a.id
WHERE recv_date >= ''''+CONVERT(VARCHAR(10),@SDate, 101) +'''' and recv_date < ''''+CONVERT(VARCHAR(10),@EDate, 101)+''''
AND aref.refmd_id in (SELECT id from #RefmdCodeList)
)
SELECT DISTINCT entity accession_no, asp.acc_id, spec_id, spec_description, spec_label,
spec_sc_code, substring(''''88''''+lab_sc.code, 1,5)
FROM spec_data asp
LEFT OUTER JOIN acc_charges lab_ac (NOLOCK) on lab_ac.acc_id = asp.acc_id and rec_type = ''''L''''
JOIN service_code lab_sc (NOLOCK) on lab_sc.id = lab_ac.service_code_id
JOIN acc_order ord (NOLOCK) on ord.id = lab_ac.rec_id
AND ord.acc_specimen_id = asp.spec_id
WHERE substring(''''88''''+spec_sc.code, 1,5) in (SELECT service_code from #ServiceCodeList)
OR substring(''''88''''+lab_sc.code, 1,5) in (SELECT service_code from #ServiceCodeList)
'') '