我正在嘗試使用鏈接服務器在針對 Oracle 資料庫的開放查詢中使用 SQL 服務器表。
我的代碼如下。
select *
INTO #customer
from openquery(
[Linkedserver],
'select
*
from
customer c
left join customer_contact cc ON c.main_contact_id = cc.contact_id
where
c.customer_account in (' (select customer_id from [database].[dbo].
[ChangeCustomers]) ')
'
)
SELECT
*
FROM
#customer
但是我收到的錯誤是
訊息 102,級別 15,狀態 1,程序 customerchecker,第 24 行 [批處理開始第 7 行]“ ”附近的語法不正確。訊息 102,級別 15,狀態 1,程序 customerchecker,第 24 行 [批處理開始第 7 行]“ ”附近的語法不正確。
任何幫助表示贊賞。
uj5u.com熱心網友回復:
你有兩個問題
- 不能
OPENQUERY與變數或運算式一起使用。它必須是文字,因此您需要動態 SQL。 - 您需要聚合子查詢,否則它將只期望一個結果。
DECLARE @sql nvarchar(max) = N'
select *
INTO #customer
from openquery(
[Linkedserver],
''select
*
from
customer c
left join customer_contact cc ON c.main_contact_id = cc.contact_id
where
c.customer_account in (
' (
select STRING_AGG(QUOTENAME(QUOTENAME(customer_id, ''''), ''''), ',')
from [database].[dbo].[ChangeCustomers]
) '
)
''
);
SELECT
*
FROM
#customer;
';
PRINT @sql; --for testing
EXEC sp_executesql @sql;
請注意該OPENQUERY部分是如何進行雙重轉義的,因為它在動態中是動態的。
我不評論此類查詢的性能,也不評論為什么您決定將資料轉儲到臨時表中,只是為了立即將其選回(您可能只有一個正常的SELECT)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/361946.html
標籤:sql sql-server 查询语句
