2014-07-17 5 views
0

흥미로운 문제입니다. SAP 데이터 인 Linked Server의 일부 테이블에 JOINs하는 CTE가 있습니다. 이 CTE는 저장 프로 시저에있는 다음 타이머 (10 분마다)에서 SQL Server 에이전트 작업을 통해 실행됩니다. 이것은 거의 20 시간 동안 잘 돌아가고 멀티 파트 식별자로 죽으면 오류를 일으킬 수 없습니다 (CTE 아래의 정확한 오류).연결된 서버가있는 CTE : 다중 항목 식별자를 바인딩 할 수 없습니다.

서버 작업 실행 : SQL 서버 2008 R2 (아무 SP)

연결된 서버

: SQL 서버 2005 SP3 주택 SAP

CTE를 :

WITH TaktValues ([Counter], NODE, PLNNR) AS 
(
    SELECT 
     MAX(plpo1.ZAEHL) AS [Counter], MAX(plpo1.PLNKN) AS NODE, plpo1.PLNNR 
    FROM 
     etl.PLPO plpo1 
    GROUP BY plpo1.PLNNR 
) 
SELECT 
    s022.AUFNR AS WorkOrder, 
    (CASE 
     WHEN plpo.SPLIM = 0 THEN 0 
     ELSE plpo.VGW01/plpo.SPLIM 
     END) AS TaktTime 
INTO 
    [plc].[TaktTime] 
FROM 
    etl.S022 s022 
INNER JOIN 
    etl.AFPO afpo on afpo.AUFNR = s022.AUFNR 
INNER JOIN 
    etl.AFKO afko on afko.AUFNR = s022.AUFNR 
INNER JOIN 
    etl.PLPO on plpo.PLNNR = afko.PLNNR 
INNER JOIN 
    TaktValues ON plpo.PLNNR = TaktValues.PLNNR 
       AND plpo.ZAEHL = TaktValues.[Counter] 
       AND plpo.PLNKN = TaktValues.NODE 
WHERE 
    s022.AUFNR IN (SELECT DISTINCT WorkOrder FROM plc.AlarmData) 
ORDER BY 
    s022.AUFNR DESC 

오류 :

Msg 8180, Level 16, State 1, Line 1
Statement(s) could not be prepared.

Msg 4104, Level 16, State 1, Line 1
The multi-part identifier "Tbl1008.AUFNR" could not be bound.

Msg 4104, Level 16, State 1, Line 1
The multi-part identifier "Tbl1008.AUFNR" could not be bound.

+0

내가 그 SQL에 연결된 서버 참조에 대한 4 부분 이름을 볼 ...없는 : 다음과 같이이 있습니까? – DarrenMB

+0

"Tbl1008.AUFNR"은 귀하의 질문에 있지 않기 때문에 저에게 큰 빨간 점입니다. 뷰 또는 다른 종속 하위 오브젝트에 사용되는 하위 구성 요소라고 기대합니다. 오류를 일으키는 시간이 지남에 따라 뷰가 다시 작성되거나 시스템에 의해 변경되었을 수 있습니다. – DarrenMB

+0

네 부분에 이름 지정 -> 전화가 동의어를 통해 이루어지고 있습니다. – devnate

답변

0

"멀티 파트 i에서 설명한대로 연결된 서버에 대한 전체 참조가 누락 된 것 같습니다. "Tbl1008.AUFNR"이 (가) 바인딩 될 수 없습니다. " 테이블 오브젝트를 바인드 할 수 있으려면 작업에 대해 링크 된 서버 오브젝트의 완전한 이름을 지정해야합니다. ...

가 [서버 _] [데이터베이스 _] [SCHEMA_NAME] [TABLE_NAME]

+0

동의어를 통해이를 실행하고 있는데, syn 대신 4 가지 이름을 사용해야합니까? – devnate

+0

그냥 4 부분 이름을 사용하고 변경 사항이 없습니다. – devnate