2011-04-14 2 views
0

EDIT 4/18 : 지금까지 답변 한 모든 사람에게 감사드립니다. 시험 삼아 난의 한 단계를 가지고 새로운 일,SQL 작업이 실패했지만 저장 프로 시저가 없습니다.

EXECUTE p_CallLog_GetAbandonedCallsForCallList 

이 절차 자체는 잘 실행 및 보고서 오류 또는 경고를하지만 작업의 일부로 실행시 실행되지 않습니다를 설정했습니다. 작업을 실행할 때 나타나는 오류입니다 : 나는 사용자의 선택과 실행 그리고 난의 오류가 발생하려고 다른 모든 선택 변경 시도

Executed as user: NT AUTHORITY\SYSTEM. OLE DB provider 'SQLOLEDB' reported an error. [SQLSTATE 42000] (Error 7399) [SQLSTATE 01000] (Error 7312) OLE DB error trace 
[OLE/DB Provider 'SQLOLEDB' IDBInitialize::Initialize returned 0x80004005: ]. 
[SQLSTATE 01000] (Error 7300). The step failed. 

: 사용자의 모든

Executed as user: Db2WebCal. Remote access not allowed for Windows NT user activated 
by SETUSER. [SQLSTATE 42000] (Error 7410). The step failed. 

를 I 연결된 서버에서 로컬 로그인 설정을 시도했습니다. 다음

p_CallLog_GetAbandonedCallsForCallList 절차는 :

CREATE  PROCEDURE [dbo].[p_CallLog_GetAbandonedCallsForCallList] 

AS 
BEGIN 
    DECLARE @SrvrName varchar(255) 
    DECLARE @HoursOld int --only get abandoned call that are fresher than @HoursOld 

    SET @HoursOld = 2 /*was normal default  */ 
    SET @SrvrName = CAST(ServerProperty('MachineName') as varchar(255)) 

    CREATE TABLE #tmpAbandonedCalls 
    (
     [ID] INT NULL, 
     StartTime DateTime NULL, 
     CallerIDNumber varchar(255) NULL, 
     CallerIDCount INT NULL, 
     Holdtime INT NULL, 
     DIDNumber varchar(20) NULL, 
     CustomData varchar(255) NULL, 
     FromFirstName varchar(100) NULL, 
     FromLastName varchar(100) NULL, 
     CallType int NULL 
    ) 

    IF @SrvrName <> 'ROME' BEGIN 
     INSERT INTO #tmpAbandonedCalls 
     SELECT 
      cl.[ID], 
      cl.StartTime, 
      cl.CallerIDNumber, 
      LastAbandonedCallID.cnt as CallerIDCount, 
      cl.HoldTime, 
      right(cl.DIDNumber,10) as DIDNumber, 
      REPLACE(right(left(cl.CustomData,charindex(';',cl.CustomData) - 1), len(left(cl.CustomData,charindex(';',cl.CustomData) - 1)) - charindex('=',cl.CustomData)) , ' NAME','') as CustomData, 
      cl.FromFirstName, 
      cl.FromLastName, 
      2 AS CallType     -- T_L_CallType obctAbandoned 
     FROM 
      [StrataCS.Perceptionist.local].TVDB.dbo.CallLog CL LEFT OUTER JOIN 

      /*============================================= 
      This derived table lists the CallerID's and the most 
      recent Call Log ID for candidate calls 
      =============================================*/ 
      (
       SELECT 
        CallerIDNumber, Max(ID) as ID, count(*) as cnt 
       FROM 
        [StrataCS.Perceptionist.local].TVDB.dbo.CallLog CL 
       WHERE 
        --Last n days 
        --StartTime >= DATEADD(dd,[email protected],CAST(CONVERT(VARCHAR(10),GETDATE(),112) as DATETIME)) 

        --Get calls only from within the last two hours. 
        StartTime >= DATEADD(hh,-2,GETDATE()) 
        AND 
        LEFT(CustomData,11) = 'CompanyName' 
        AND 
        CHARINDEX('Db2ID', CustomData) > 0 
        AND 
        CallerIDNumber <> '' 
        AND 
        Len(CallerIDNumber) = 10 
        AND 
        (cl.HoldTime > 0) --0 holdtime is generally an automated call that we will not want to call again 
       GROUP BY 
        CallerIDNumber 
      ) as LastAbandonedCallID 
      ON 
      CL.CallerIDNumber = LastAbandonedCallID.CallerIDNumber 
     WHERE 
      --Last n days 
      --StartTime >= DATEADD(dd,[email protected],CAST(CONVERT(VARCHAR(10),GETDATE(),112) as DATETIME)) 

      --Get calls only from within the last two hours. 
      cl.StartTime >= DATEADD(hh,(-1 * @HoursOld),GETDATE()) 
      AND 
      --determine abandoned calls 
      CASE 
        WHEN CL.Result IN (0, 3, 11) THEN 0 
        WHEN CL.Result IN (1, 2)  THEN 1 
        WHEN CL.Result IN (4, 9)  THEN 2 
        WHEN CL.Result = 5    THEN 3 
        WHEN CL.Result = 6    THEN 4 
        WHEN CL.Result = 8    THEN 5 
        WHEN CL.Result = 10    THEN 6 
        WHEN CL.Result = 12    THEN 7 
        WHEN CL.Result = 13    THEN 8 
        WHEN CL.Result = 14    THEN 9 

        ELSE -CL.Result 
       END = 0 
      --Calls which have hit the call queue will have both a CompanyName and Db2ID in custom data. 
      AND 
      LEFT(CustomData,11) = 'CompanyName' 
      AND 
      CHARINDEX('Db2ID', CustomData) > 0 
      AND 
      --omit calls with no caller id -- or from IGC 6143847400 
      (
       CL.CallerIDNumber <> '' 
       --OR CL.CallerIDNumber = '6143847400' 
      ) 
      AND 
      --make sure the caller id has 10 digits 
      Len(CL.CallerIDNumber) = 10 
      AND 
      --The abandoned call must be the most recent call from this caller id 
      --CL.ID >= isnull(LastAbandonedCallID.ID,[email protected]) 
      CL.ID >= isnull(LastAbandonedCallID.ID,-1) 
      AND 
      (CL.HoldTime > 0) --0 holdtime is generally an automated call that we will not want to call again 
     ORDER BY 
      --sort by call time, most recent first. 
      StartTime DESC 

     -- Company has opted out of the Abandoned Callback program 
     DELETE #tmpAbandonedCalls 
     FROM 
      #tmpAbandonedCalls tmp 
      INNER JOIN dbo.T_CompanyPhoneSetup cps 
       on tmp.DIDNumber = cps.DID 
      INNER JOIN T_CompanyAbandonedCallbackOptOut aco 
       ON cps.CompanyID = aco.CompanyID 
        AND 
        aco.OptOutIsActive = 1 

     --Delete calls that have had a terminating outcome or have been returned within the last 20 minutes 
     DELETE #tmpAbandonedCalls 
     FROM 
      #tmpAbandonedCalls 
      INNER JOIN 
      (
       SELECT 
        c.CallLogID 
       FROM 
        T_Call c (nolock) 
        INNER JOIN #tmpAbandonedCalls tmp 
         on tmp.ID = c.CallLogID 
        LEFT OUTER JOIN T_L_Need n 
         ON c.NeedID = n.NeedID 
        LEFT OUTER JOIN T_L_Outcome o 
         ON c.OutcomeID = o.OutcomeID 
        LEFT OUTER JOIN dbo.T_L_CallCampaignDetailStatus ccds 
         ON o.CCDetailStatusID = ccds.CCDetailStatusID 
        LEFT OUTER JOIN dbo.T_Company co 
         ON c.CompanyID = co.CompanyID 
        LEFT OUTER JOIN dbo.T_L_ProductLine pl 
         ON co.ProductLineID = pl.ProductLineID 
        LEFT OUTER JOIN T_CompanyAbandonedCallbackOptOut aco 
         ON (c.CompanyID = aco.CompanyID) and (aco.OptOutIsActive = 1) 
       GROUP BY 
        c.CallLogID 
       HAVING 
        --Calls that have an outcome that include at least one terminating outcome 
        (SUM(CAST(isnull(ccds.IsTerminal,0) as INT)) > 0) 
        OR 
        (
         --Calls that have been returned less than 20 minutes ago 
         (SUM(CAST(isnull(ccds.IsTerminal,0) as INT)) = 0) 
         AND 
         GETDATE() <= DATEADD(mi,20,Max(c.EnteredOn)) 
        ) 
        OR 
        (
         --Calls for Perceptionist Lite product line 
         (MAX(co.ProductLineID) = 2) -- Perceptionist Lite 
        ) 

      ) LastCall 
      ON 
       #tmpAbandonedCalls.[ID] = LastCall.CallLogID 

    END 

    INSERT INTO T_OutboundCallList 
    (TrackingID, Company, CompanyDID, Phone, CallType) 
    SELECT 
     #tmpAbandonedCalls.[ID], 
     #tmpAbandonedCalls.CustomData, 
     #tmpAbandonedCalls.DIDNumber, 
     #tmpAbandonedCalls.CallerIDNumber, 
     #tmpAbandonedCalls.CallType 
    FROM 
     #tmpAbandonedCalls 
    ORDER BY 
     StartTime 


END 
GO 

ORIGINAL : I 값을 가진 테이블을 작성하는 데 사용되는 다음과 같은 프로 시저가있다.

PROCEDURE [dbo].[p_OutboundCallList_Create] 

AS 

BEGIN 

    TRUNCATE TABLE T_OutboundCallList 

    EXECUTE p_LeadVendor_GetCallsForCallList 
    EXECUTE p_CallCampaign_GetCallsForCallList  
    EXECUTE p_CallLog_GetAbandonedCallsForCallList  
    EXECUTE p_NoSaleFollowUp_GetCallsForCallList 

END 

이 작동이 제대로 작동하고 테이블이 가득 찼습니다. 다음 단계 작업을 생성하고 추가 한 후 :

EXEC p_OutboundCallList_Create 
작업이 다음 오류 메시지와 함께 실패

:

Executed as user: NT AUTHORITY\SYSTEM. Warning: Null value is eliminated 
by an aggregate or other SET operation. [SQLSTATE 01003] (Message 8153) 
Warning: Null value is eliminated by an aggregate or other SET operation. 
[SQLSTATE 01003] (Message 8153) OLE DB provider 'SQLOLEDB' reported an error. 
[SQLSTATE 42000] (Error 7399) [SQLSTATE 01000] (Error 7312) OLE DB error trace 
[OLE/DB Provider 'SQLOLEDB' IDBInitialize::Initialize returned 0x80004005: ]. 
[SQLSTATE 01000] (Error 7300). The step failed. 

I 라인

EXECUTE p_CallLog_GetAbandonedCallsForCallList 

용맹 한 작업을 주석 경우 잘 실행됩니다. 이 저장 프로 시저 (p_CallLog_GetAbandonedCallsForCallList)는 연결된 서버에 의존하며 자체적으로 잘 실행되며 p_OutboundCallList_Create를 실행하면 정상적으로 실행됩니다. 그것은 내가 일자리의 일부로 그것을 실행할 때만 실패합니다. 다른 사용자 (sa, benderle 등)로 실행을 시도하고 항상 동일한 결과 (실패)를 얻습니다.

+0

모든 의견이 누락 된 것 같습니다. 작업을 실행하는 계정에이 설치 http://support.microsoft.microsoft이 필요할 수 있다고 제안했습니다.com/kb/814398 –

답변

0

"누적 값은 집계 또는 다른 SET 작업에서 제거됩니다"는 SQL Server 경고입니다. 즉, 쿼리를 실행하고이 경고가 발생하면 출력에서이 값이 표시되지 않습니다 ("메시지 "탭을 참조하십시오).

경고이지만 SQL 작업의 경고로 인해 작업이 오류가 발생할 수 있습니다. p_CallLog_GetAbandonedCallsForCallList 절차를 수정하면 경고가 나타나지 않고 예상대로 작업이 진행됩니다.

0

이 코드가 p_CallLog_GetAbandonedCallsForCallList에 표시되는 데 관심이 있으시면 NT AUTHORITY \ SYSTEM 사용자에 대해 더 자세히 설명 할 수 있습니다.

집합을 수행 할 때 메시지가 발생합니다 (예 : sum(), max(), count(), null이있는 데이터 세트에 있음).

이 문제를 해결하려면 문제의 필드 주위에 ISNULL()을 넣거나 LEFT 또는 RIGHT JOIN 대신 INNER JOIN을 사용해야 할 수 있습니다.

+1

나는 그것이받은 모든 메시지를 오류 메시지에보고한다고 가정합니다. 관심있는 것은 링크 된 서버의'Initialize' 에러 인 것 같습니다. –

관련 문제