私はプログラムを引き継いで、私のストアドプロシージャの1つに、ジオコーディングサービスのXML出力を読み込んで値を解析するSPでランダムに失敗するSSISジョブがあることがわかりましたintとVarCharを比較するSSMS 12 SP
INSERT #out_p_geocode_addresses
--where my following SP's are looking for the successfully geocoded addresses
(address_id int
,score int
,lat int
,lon int
,standard_address VARCHAR(max)
,geocode_match_flag bit
)
SELECT t.address_id
,CONVERT(VARCHAR(MAX),Records.Record.query('./Values/Value[sql:variable("@positionScore")]'))
,CASE
--Retrieves the 'Y' geocode value and sets it to the 'lat' field
WHEN ISNUMERIC(CONVERT(VARCHAR(MAX),Records.Record.query('./Values/Value[sql:variable("@positionShape")]/Y[1]'))) = 1
THEN CONVERT(VARCHAR(MAX),Records.Record.query('./Values/Value[sql:variable("@positionShape")]/Y[1]'))
END
,CASE
--Retrieves the 'X' geocode value and sets it to the 'lon' field
WHEN ISNUMERIC(CONVERT(VARCHAR(MAX),Records.Record.query('./Values/Value[sql:variable("@positionShape")]/X[1]'))) = 1
THEN CONVERT(VARCHAR(MAX),Records.Record.query('./Values/Value[sql:variable("@positionShape")]/X[1]'))
END
--sets value for the standard_address Field
,CONVERT(VARCHAR(MAX),Records.Record.query('./Values/Value[sql:variable("@positionMatch_addr")]'))
,CASE
--sets the geocode_match_flag to 'Y' if the 'lon' field is numeric and not null or sets the value to 'N'
WHEN ISNUMERIC(CONVERT(VARCHAR(MAX),Records.Record.query('./Values/Value[sql:variable("@positionShape")]/X[1]'))) = 1
THEN 'Y'
ELSE 'N'
ENDFROM #batch_p_geocode_addresses AS t
JOIN @GeocodeResultXML.nodes('//RecordSet/Records/Record')
AS Records(Record)
ON t.address_id = CONVERT(VARCHAR(MAX),Records.Record.query('./Values/Value[sql:variable("@positionResultId")]'))
このジョブの問題はランダムには発生せず、常に100回以上実行した後に発生します。しかし、JOINの比較では、なぜそれが全く動作しているのか理解できません。
この比較がうまくいかない理由、またはこのSPを呼び出すときにランダムに失敗する理由を説明できますか?
ご協力いただければ幸いです。
私は上記のSPを呼び出すためにTry/Catchブロックを使用していますが、私はTRY-CONVERTを調べます。私はそれを聞いたので、私はそれがどのように動作するか熱望しています – tCoe