저장 프로 시저가 수동으로 실행 중이지만 SQL Server 에이전트를 사용하여 실행되지는 않습니다.SQL XML 구문 분석 SQL Server 에이전트를 통해 실행하지 않고 수동으로 실행하는 저장 프로 시저
나는
사용자로 실행 다음과 같은 오류를 얻을 : XXX를. XML 구문 분석 : 9 행 9, 예기치 않은 입력 입력 끝 [SQLSTATE 42000] (오류 9400). 단계가 실패했습니다.
저장 프로 시저는 XML 쿼리를 웹 쿼리에서 가져 와서 임시 테이블의 단일 셀에 저장합니다. 임시 테이블에서 데이터를 구문 분석하고 새로운 읽기 쉬운 정보를 영구 테이블에 저장합니다. 매일 쿼리를 실행하고 해당 날짜의 데이터를 가져와야합니다.
나는 문제를 찾고자했지만 내가 가진 유일한 단서는 XML이 어딘가에 잘려져 있다는 것입니다. 왜 이런 일이 일어나고 있는지 전혀 모르겠습니다.
도움이된다면 도움이 될 것입니다.
감사합니다.
EDIT1 : 나는 7 가지 단계로 절차를 분할했습니다. 이것이 넘어지는 단계입니다.
INSERT XMLData(XMLD) SELECT CAST(HTML AS XML) As XMLData FROM TextData
EDIT2 : 여기에 코드
DECLARE
@url varchar(2048),
@win integer,
@hr integer ,
@text varchar(MAX),
@XMLdata XML,
@Date date,
@SearchDate nvarchar(50)
Set @Date = GETDATE()
set @SearchDate = CAST(@Date as nvarchar(50))
set @SearchDate = REPLACE(@SearchDate,'-','')
--set @SearchDate='20130405'
/*-- Create Temporary tables to be used to store the xml data--*/
/*-- We need 2 tables as the raw data from SEMO is Unicode 'UTF-8' but SQL only handles 'UTF-16'--*/
/*-- We must therefore store the data first as Text and then CAST it to XML datatype for easy querying later --*/
CREATE TABLE #TextData(HTML text NULL)
CREATE TABLE #XMLData(XMLD xml NULL)
/*-- This url will have to be dynamically generated each day based on GetDate() query or similiar - to be cracked out fully - random date picked for now--*/
Select @url = 'http://.......'
/* Use OLE Automation Objects to go out and get the data--*/
EXEC @hr=sp_OACreate 'WinHttp.WinHttpRequest.5.1',@win OUT
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
EXEC @hr=sp_OAMethod @win, 'Open',NULL,'GET',@url,'false'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
EXEC @hr=sp_OAMethod @win,'Send'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
INSERT #TextData(HTML)
EXEC @hr=sp_OAGetProperty @win,'ResponseText'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
EXEC @hr=sp_OADestroy @win
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
/*-- Now CAST the text data to XML data type which makes it much easier to query back--*/
INSERT #XMLData(XMLD)
SELECT CAST(HTML AS XML) As XMLData FROM #TextData
/*-- WE NEED TO ADD IN A SECTION HERE NOW TO PARSE THE XML DATA AND EXTRACT THE INFO WE NEED INTO A DEDICATED TABLED--*/
/*-- Replace the : in the #XMLData table with _ as the colons were causing errors --*/
UPDATE #XMLData
SET XMLD = REPLACE(CAST(XMLD as varchar(max)),':' ,'_')
FROM #XMLData
WHERE CHARINDEX(':' ,CAST(XMLD as varchar(max)))>0
UPDATE #XMLData
SET XMLD = REPLACE(CAST(XMLD as varchar(max)),'DataSet xmlns="http_//localhost/SemoReporting/SemoAutomatedDataCollection/Datasets"' ,'DataSet')
FROM #XMLData
WHERE CHARINDEX('DataSet xmlns="http_//localhost/SemoReporting/SemoAutomatedDataCollection/Datasets"' ,CAST(XMLD as varchar(max)))>0
Select @XMLdata = XMLD
FROM #XMLData
/*-- This is to show the colons have been replaced --*/
SELECT * FROM #XMLData
Declare @i as int
set @i = 1
While @i < 97
BEGIN
/*Insert Data into SEMO Historical Table*/
INSERT INTO XMLParsing.dbo.T1301_SEMO_HISTORICAL_DATA
/*-- This selects the relevant data from table1 element --*/
SELECT
a.b.value('Table1[sql:variable("@i")][1]/CURRENCY_FLAG[1]','nvarchar(50)') AS [Currency],
a.b.value('Table1[sql:variable("@i")][1]/TRADE_DATE[1]','date') AS [Trade Date],
a.b.value('Table1[sql:variable("@i")][1]/DELIVERY_DATE[1]','date') AS [Delivery Date],
a.b.value('Table1[sql:variable("@i")][1]/DELIVERY_HOUR[1]','int') AS [Delivery Hour],
a.b.value('Table1[sql:variable("@i")][1]/DELIVERY_INTERVAL[1]','int') AS [Delivery Interval],
a.b.value('Table1[sql:variable("@i")][1]/RUN_TYPE[1]','nvarchar(50)') AS [Run Type],
a.b.value('Table1[sql:variable("@i")][1]/SMP[1]','decimal(10,4)') AS [SMP],
a.b.value('Table1[sql:variable("@i")][1]/LAMBDA[1]','decimal(10,4)') AS [Lambda],
a.b.value('Table1[sql:variable("@i")][1]/SYSTEM_LOAD[1]','decimal(10,4)') AS [System Load],
a.b.value('Table1[sql:variable("@i")][1]/CMS_TIME_STAMP[1]','nvarchar(150)') AS [CMS Time Stamp]
FROM @XMLdata.nodes('DataSet/diffgr_diffgram/EA_RESULTS') a(b)
--where
--not exists (Select * from SEMO_Historical_Data where [Trade Date] = @Date)
set @[email protected]+1
END
Drop Table #TextData
Drop Table #XMLData
우리가 당신을 도울 수 있도록 몇 가지 코드를 보여 주어야합니다. 특히 작업 단계 정의와 저장 프로 시저를 확인해야합니다. – RBarryYoung
일정을 실행할 때 무언가가 작동하지만 일정을 예약하지 않은 경우 무언가가 거의 항상 사용 권한 또는 환경입니다. 예약 된 작업은 기본적으로 SQL Server 에이전트 서비스 계정으로 실행되며이 계정은 계정에서 수행하는 모든 시스템 리소스에 대한 액세스 권한이 없을 수 있습니다. 또는 작업을 예약하는 서버에 테스트 서버와 동일한 드라이버 또는 구성이 없습니다. 그러나 절차가 정확히 무엇인지에 대한 정보가 없으면 문제가 실제로 무엇인지 말할 수 없습니다. – Pondlife
@JenniferNolan 전체 절차 (또는 문제를 재현 할 수있는 하위 집합)를 게시하십시오. 문제는 코드 초기에 발생합니다. 또한 Job Step의 SQL 명령 텍스트를 게시하십시오. – RBarryYoung