Sabit kodlanmış bir XML dosya adıyla düzgün çalışan bir saklı yordam oluşturdum. Ancak, dosya ismini kodlamaya devam edemem, XML dosyasının yapısı aynı kalmasına rağmen, yeni bir dosya her geldiğinde farklı bir dosya adı olacaktır.SQL kod kullanarak birden çok XML dosya adını okumaya izin ver
Kimsenin bana doğru yönde yardım edip/gösterebileceğini merak ettim. İşte kodlanmış xml dosya adıyla çalışan kodum. Şimdi sadece bir değil, C: \ temp \ klasöründe bulunan tüm XML dosyalarını okumak gerekiyor.
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
gibi deneyebilirsiniz:. '' 'X.product.query ('location.name') kısaltmak için yeterli olacaktır değeri (, 'varchar (200) ') 'bu' X.product.value' ('(location.name) [1]', 'varchar (200)') '. '.query()' ve '.value()' nin bu kombinasyonu genellikle bulunmalıdır, ama gerçekten gerekli değildir ... – Shnugo
Merhaba evet, özür dilerim dün hasta olmak zorundaydı. Yine de bugün buna geri döndüm ... Bu çözümü deneyeyim ve güncelleyeceğim. Yardımınız için çok teşekkür ederim – Zonke
Umarım yine iyisiniz! Şimdi çalışıyor mu? Daha fazla yardıma ihtiyacınız var mı? Lütfen SO'ya cevap veren çoğu profesyonelin itibar puanlarına aç olduğu gerçeğinin farkında olun. [Lütfen şunu okuyunuz: birisi cevap] (http://stackoverflow.com/help/someone-answers), ben oldukça bağımlıyım ;-) – Shnugo