2013-09-24 2 views
0

У меня есть выбор для одного файла в папке, может ли кто-нибудь помочь мне выбрать все файлы в папке для импорта?Импорт нескольких xml с t-sql (2005)

SELECT MACHINE = XmlContent.value('(/recordedData/machine)[1]', 'varchar(50)'), 
     RecordingDate = XmlContent.value('(/recordedData/date)[1]', 'varchar(50)'), 
     RecordingTime = XmlContent.value('(/recordedData/hour)[1]', 'varchar(50)'), 
     VariableName = XVar.value('(Name)[1]', 'varchar(50)'), 
     VariableValue = XVar.value('(Value)[1]', 'varchar(50)') 
FROM ( 
SELECT CAST(XmlContent AS XML) 
FROM OPENROWSET(
    BULK 'C:\tmp\20130918_0932_ZSK40-2.xml', 

    SINGLE_BLOB) AS T(XmlContent) 
    ) AS T(XmlContent) 
CROSS APPLY 
    XmlContent.nodes('/recordedData/CollectedData/variable') AS XTbl(XVar) 

Это должно быть трюк на пути к файлу, на который я думаю. приветствуйте помощь!

+0

Файлы имеют одинаковую структуру. – user2725348

ответ

0

Вы можете обойти xp_cmdshell, если он не отключен на вашем сервере. По существу, вы сможете запустить команду dir и обойти запрос. Вы можете сделать это следующим образом:

declare @sql nvarchar(max) = '' 
declare @t table (cmdLineResult varchar(100)) 
exec xp_cmdshell 'dir C:\tmp\*.xml' 
declare @left nvarchar(4000) = N'SELECT MACHINE = XmlContent.value(''(/recordedData/machine)[1]'', ''varchar(50)''), 
    RecordingDate = XmlContent.value(''(/recordedData/date)[1]'', ''varchar(50)''), 
    RecordingTime = XmlContent.value(''(/recordedData/hour)[1]'', ''varchar(50)''), 
    VariableName = XVar.value(''(Name)[1]'', ''varchar(50)''), 
    VariableValue = XVar.value(''(Value)[1]'', ''varchar(50)'') 
FROM ( 
SELECT CAST(XmlContent AS XML) 
FROM OPENROWSET(
BULK ' 
declare @right nvarchar(4000) = N', 
SINGLE_BLOB) AS T(XmlContent) 
) AS T(XmlContent) 
CROSS APPLY 
    XmlContent.nodes(''/recordedData/CollectedData/variable'') AS XTbl(XVar)' 
SELECT @sql += ' UNION ALL ' + @left + '''' + cmdLineResult + '''' + @right FROM @t 
SET @sql = SUBSTRING (@sql,12,len(@sql)-12) 
exec sp_executesql @sql 

Что вам нужно проверить здесь: - на данный момент я не в состоянии проверить, как выход xp_cmdshell будет выглядеть. Возможно, вам нужно будет отрегулировать определение @t и, возможно, добавить WHERE в оператор SELECT, который находится в третьей строке снизу. Могут также быть незначительные проблемы здесь и там, поскольку я пишу это с головы. Надеюсь, однако это даст вам, по крайней мере, хорошую идею, как подойти к проблеме.

+0

Msg 139, Level 15, State 1, Line 0 Невозможно присвоить значение по умолчанию локальной переменной. Msg 139, Level 15, State 1, Line 0 Невозможно присвоить значение по умолчанию локальной переменной. Msg 139, Level 15, State 1, Line 0 Невозможно присвоить значение по умолчанию локальной переменной. Msg 137, уровень 15, состояние 2, строка 18 Должен объявить скалярную переменную «@sql». Msg 137, уровень 15, состояние 2, строка 19 Должен объявить скалярную переменную «@sql». Msg 137, уровень 15, состояние 2, строка 20 Должен объявить скалярную переменную «@sql». есть результаты до сих пор. Пытаясь теперь исследовать ... – user2725348

+0

удалось получить результат: Объем в диске C является система Серийный номер тома является 806F-BF63 NULL Справочник C: \ TMP NULL 18.09.2013 9:32 2,656 20130918_0932_ZSK40- 2.xml 18.09.2013 10:32 3,249 20130918_1032_ZSK70.xml 21.09.2013 5:32 2,716 20130921_0532_ZSK40-2.xml 3 файла (ов) 8.621 байт 0 Dir (ы) 4.372.721.664 байт свободных NULL – user2725348

+0

я похоже, получите список временного каталога со сценарием. любая дополнительная помощь пожалуйста? – user2725348

Смежные вопросы