を使用してフォルダから複数のXMLファイル名を読み取ることができます。ハードコードされたXMLファイル名で正常に機能するストアドプロシージャが作成されました。しかし、XML構造は同じままですが、新しいファイルが来るたびに別のファイル名になるので、ファイル名をハードコーディングしておくことはできません。SQLコード
誰かが助けて正しい方向に向けるかどうか疑問に思った。ここでは、ハードコードされたXMLファイル名で動作する私のコードです。これで、C:\ temp \フォルダに存在するすべてのXMLファイルを読み込む必要があります。
CREATE PROC [dbo].[XMLIputData] as
;WITH XMLNAMESPACES(DEFAULT 'http://www.sxi.co.za/XMLSchema')
INSERT INTO FNBXMLData
(
[CIpriority],
[ref_num],
[summary],
[act_log],
[impact.sym],
[category.sym],
[affected_resource.name],
[affected_resource.class.type],
[status.sym],
[customer.billing_code.name],
[affected_resource.model.sym],
[customer.first_name],
[customer.last_name],
[customer.phone_number],
[customer.beeper_phone] ,
[customer.email_address] ,
[location.name] ,
[affected_resource.location.address1] ,
[affected_resource.location.address6] ,
[affected_resource.location.city.sym] ,
[affected_resource.location.state.sym] ,
[category.service_type.sys] ,
[affected_resource.znr_inc_service_type.sym] ,
[affected_resource.znr_cr_service_type.sym] ,
[category.service.type.sym] ,
[SXI_SigReg_ActionField] ,
[SXI_SigReg_EntryIdField] ,
[SXI_SigReg_EpochTimeField] ,
[SXI_SigReg_UniqueIdField])
SELECT
X.product.query('CIpriority').value('.', 'varchar(5)'),
X.product.query('ref_num').value('.', 'varchar(20)'),
X.product.query('summary').value('.', 'varchar(200)'),
X.product.query('act_log').value('.', 'varchar(200)'),
X.product.query('impact.sym').value('.', 'varchar(200)'),
X.product.query('category.sym').value('.', 'varchar(200)'),
X.product.query('affected_resource.name').value('.', 'varchar(200)'),
X.product.query('affected_resource.class.type').value('.', 'varchar(200)'),
X.product.query('status.sym').value('.', 'varchar(50)'),
X.product.query('customer.billing_code.name').value('.', 'varchar(20)'),
X.product.query('affected_resource.model.sym').value('.', 'varchar(50)'),
X.product.query('customer.first_name').value('.', 'varchar(20)'),
X.product.query('customer.last_name').value('.', 'varchar(20)'),
X.product.query('customer.phone_number').value('.', 'varchar(20)'),
X.product.query('customer.beeper_phone').value('.', 'varchar(20)'),
X.product.query('customer.email_address').value('.', 'varchar(200)'),
X.product.query('location.name').value('.', 'varchar(200)'),
X.product.query('affected_resource.location.address1').value('.', 'varchar(200)'),
X.product.query('affected_resource.location.address6').value('.', 'varchar(200)'),
X.product.query('affected_resource.location.city.sym').value('.', 'varchar(200)'),
X.product.query('affected_resource.location.state.sym').value('.', 'varchar(200)'),
X.product.query('category.service_type.sys').value('.', 'varchar(200)'),
X.product.query('affected_resource.znr_inc_service_type.sym').value('.', 'varchar(200)'),
X.product.query('affected_resource.znr_cr_service_type.sym').value('.', 'varchar(200)'),
X.product.query('category.service.type.sym').value('.', 'varchar(200)'),
X.product.query('SXI_SigReg_ActionField').value('.', 'varchar(200)'),
X.product.query('SXI_SigReg_EntryIdField').value('.', 'varchar(200)'),
X.product.query('SXI_SigReg_EpochTimeField').value('.', 'varchar(200)'),
X.product.query('SXI_SigReg_UniqueIdField').value('.', 'varchar(200)')
FROM (
SELECT CAST(x AS XML)
FROM OPENROWSET(
BULK 'C:\temp\X-ServiceBroker~FNBUSD-DIEBOLD~702012850747092.75.xml',
SINGLE_BLOB) AS T(x)
) AS T(x)
CROSS APPLY x.nodes('XServiceBroker') AS X(product);
GO
ようにそれを試してみてください:この 'X.product.query( 'location.name')を短縮するために十分であるべき値(「varchar型。 '' (200) ') 'を' X.product.value('(location.name)[1] '、' varchar(200) ') 'に設定します。 '.query()'と '.value()'のこの組み合わせは、しばしば見つかるはずですが、実際には必要ではありません。 – Shnugo
こんにちは、病院にいなければならなかったのは申し訳ありません。私は今日それに戻って今日です...私はこの解決策を試してみましょうと私は更新されます。あなたの助けをありがとうございます – Zonke
あなたは再びうまくいけるといいですね!それは今働いていますか?さらに助けが必要ですか? SOの回答を得ているほとんどの専門家が評判の点で飢えているという事実にご注意ください。 [これを読んでください:誰かの回答](私はむしろ中毒です;-) – Shnugo