Вы должны объявить пространство имен, используя WITH XMLNAMESPACES , а затем префиксировать имена с префиксом схемы (ns1
в моем примере) при запросе к ним.Таким образом, ваш код должен выглядеть примерно так:
DECLARE @fileData XML
SELECT @fileData = BulkColumn
FROM OpenRowSet(BULK 'E:\inbox\ogrid.xml',Single_blob) x;
WITH XMLNAMESPACES ('urn:schemas-microsoft-com:sql:SqlRowSet1' as ns1)
SELECT
xdata.value('ns1:ogrid_cde[1]','int') ogrid_cde,
xData.value('ns1:ogrid_nam[1]','nvarchar(255)') ogrid_name,
xData.value('ns1:ogrid_adr_nam[1]','nvarchar(255)') ogrid_adr_name,
xData.value('ns1:mail_stop[1]','nvarchar(255)') mail_stop,
xData.value('ns1:line1_adr[1]','nvarchar(255)') line1_adr,
xData.value('ns1:line2_adr[1]','nvarchar(255)') line2_adr,
xData.value('ns1:line3_adr[1]','nvarchar(255)') line3_adr,
xData.value('ns1:city_nam[1]','nvarchar(255)') city_name,
xData.value('ns1:st_nam[1]','nvarchar(255)') st_name,
xData.value('ns1:zip_cde[1]','nvarchar(255)') zip_cde,
xData.value('ns1:ctry_nam[1]','nvarchar(255)') ctry_name,
xData.value('ns1:phone_num[1]','decimal(28,10)') phone_num,
xData.value('ns1:fax_num[1]','decimal(28,10)') fax_num,
xData.value('ns1:stat_eff_dte[1]','datetime') stat_eff_dte,
xData.value('ns1:issng_ag_cde[1]','nvarchar(255)') issng_ag_cde,
xData.value('ns1:lst_modified_dte[1]','datetime') last_modified_dte,
xData.value('ns1:created_dte[1]','datetime') created_dte,
xData.value('ns1:ogrid_stat_cde[1]','nvarchar(255)') ogrid_stat_cde
FROM
@fileData.nodes('root/ns1:ogrid') AS x(xData)
Кроме того, тип decimal(28,10)
не имеет большого смысла для номеров телефонов и факсов.
И что еще более важно, сообщите своему руководителю, чтоВы опубликовали все данные - имена, адреса, номера телефонов и т. д. Возможно, вашей компании необходимо знать об этом.В следующий раз, когда вы захотите это сделать, измените XML, оставив в нем только несколько строк, и анонимизируйте данные.