2010年6月29日 - 我從之前的刪除語句中獲得了未提交的操作。我犯了這個行爲,並且我得到了另一個關於衝突的主ID的錯誤。我可以解決這個問題。因此,故事的士氣,承諾你的行爲。鏈接服務器查詢運行但不完成?
原來的問題 -
我試圖運行此查詢:
with spd_data as (
select *
from openquery(IRPROD,'select * from budget_user.spd_data where fiscal_year = 2010')
)
insert into [IRPROD]..[BUDGET_USER].[SPD_DATA_BUD]
(REC_ID, FISCAL_YEAR, ENTITY_CODE, DIVISION_CODE, DEPTID, POSITION_NBR, EMPLID,
spd_data.NAME, JOB_CODE, PAY_GROUP_CODE, FUND_CODE, FUND_SOURCE, CLASS_CODE,
PROGRAM_CODE, FUNCTION_CODE, PROJECT_ID, ACCOUNT_CODE, SPD_ENC_AMT, SPD_EXP_AMT,
SPD_FB_ENC_AMT, SPD_FB_EXP_AMT, SPD_TUIT_ENC_AMT, SPD_TUIT_EXP_AMT,
spd_data.RUNDATE, HOME_DEPTID, BUD_ORIG_AMT, BUD_APPR_AMT)
SELECT REC_ID, FISCAL_YEAR, ENTITY_CODE, DIVISION_CODE, DEPTID, POSITION_NBR, EMPLID,
spd_data.NAME, JOB_CODE, PAY_GROUP_CODE, FUND_CODE, FUND_SOURCE, CLASS_CODE,
PROGRAM_CODE, FUNCTION_CODE, PROJECT_ID, ACCOUNT_CODE, SPD_ENC_AMT, SPD_EXP_AMT,
SPD_FB_ENC_AMT, SPD_FB_EXP_AMT, SPD_TUIT_ENC_AMT, SPD_TUIT_EXP_AMT,
spd_data.RUNDATE, HOME_DEPTID, lngOrig_amt, lngAppr_amt
from spd_data
left join Budgets.dbo.tblAllPosDep on project_id = projid
and job_code = jcc and position_nbr = psno
and emplid = empid
where OrgProjTest = 'EQUAL';
基本上我選擇從IRPROD(一個Oracle數據庫)的表,與當地表連接它,將結果返回到IRPROD。
我遇到的問題是,查詢運行時,它永遠不會停止。我已經讓它運行了一個小時,並一直持續到我取消它。我可以在帶寬監視器上看到進出的SQL Server數據。另外,如果我只運行查詢的select部分,它會在4秒內返回結果。
任何想法爲什麼它沒有完成?我有類似的方式設置其他查詢,並沒有任何問題(從本地表中授予這些插入而不是遠程表)。
你有沒有看過Oracle的一面?那就是你插入的地方,那就是鎖和約束最有可能的地方。 – 2010-06-28 18:28:46
@Stephanie沒有看過Oracle方面。如果有約束不會拋出錯誤?我會在這方面進行更深入的檢查,但是我的問題是我不熟悉Oracle和SQL Server。 – 2010-06-28 18:35:00
使用單個列創建一個唯一約束表。從一個會話開始兩個會話插入1,然後從第二個插入1。第二個將等待第一個提交或回滾。如果一個提交,只有一個錯誤。但它可以永遠等待。但是,您可能會遇到什麼可能不確定的等待從SQL Server中讀取?是的,可能有1個線程,但爲什麼要注意ZERO阻塞的可能性?只因爲你最熟悉?這就像盯着車內空的燃油表,想知道爲什麼沒有氣體從泵中流出。 – 2010-06-29 13:32:32