Sql server 2005 从数据库中选择xml文件名
我有一个sql脚本,它将xml的文件名加载到数据库(tmp1)中 列表如下所示:Sql server 2005 从数据库中选择xml文件名,sql-server-2005,Sql Server 2005,我有一个sql脚本,它将xml的文件名加载到数据库(tmp1)中 列表如下所示: 20130918_0932_ZSK40-2.xml 20130918_1032_ZSK70.xml 20130921_0532_ZSK40-2.xml SELECT CAST(XmlContent AS XML) FROM OPENROWSET( BULK 'C:\20130921_0532_ZSK40-2.xml', SINGLE_BLOB) AS T(XmlCon
20130918_0932_ZSK40-2.xml
20130918_1032_ZSK70.xml
20130921_0532_ZSK40-2.xml
SELECT CAST(XmlContent AS XML)
FROM OPENROWSET(
BULK 'C:\20130921_0532_ZSK40-2.xml',
SINGLE_BLOB) AS T(XmlContent)
) AS T(XmlContent)
在另一个脚本中,我希望加载每个xml文件,以便将其导入数据库
我需要的是选择tmp1中的第一个文件名来加载它
加载文件的脚本部分如下所示:
20130918_0932_ZSK40-2.xml
20130918_1032_ZSK70.xml
20130921_0532_ZSK40-2.xml
SELECT CAST(XmlContent AS XML)
FROM OPENROWSET(
BULK 'C:\20130921_0532_ZSK40-2.xml',
SINGLE_BLOB) AS T(XmlContent)
) AS T(XmlContent)
它应该是什么样子
提前感谢,
IF OBJECT_ID('tempdb..#tmpTable') IS NOT NULL
DROP TABLE #tmpTable
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)')
Into #tmpTable
FROM (
SELECT CAST(XmlContent AS XML)
FROM OPENROWSET(
BULK 'C:\xml_path_here.xml',
SINGLE_BLOB) AS T(XmlContent)
) AS T(XmlContent)
CROSS APPLY
XmlContent.nodes('/recordedData/CollectedData/variable') AS XTbl(XVar)
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.VariableName)
FROM #tmpTable c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT machine, RecordingDate, RecordingTime, ' + @cols + ' from
(
select machine
, RecordingDate
, RecordingTime
, VariableName
, VariableValue
from #tmpTable
) x
pivot
(
max(VariableValue)
for VariableName in (' + @cols + ')
) p '
execute(@query)
--SELECT * FROM #tmpTable
drop table #tmpTable
欢迎来到堆栈溢出。您可以使用工具栏按钮格式化源代码。这次我是为你做的。此外,您似乎正在使用非标准SQL功能,但没有提到您的数据库引擎正在使用。请相应地重新标记问题。在何处加载内容?在一张桌子上?每个XML文件在不同的表中?@user2725348因此,每个XML在其表中,对吗?每次XML文件名都会不同。我只是想一个接一个地插入它,但是我在从数据库tmp1中选择top1时遇到了麻烦。我假设它不是路径,而是一些脚本{select top1 from tmp1},但我不认为这会起作用。所有xml都会放入一个表中,但每次一个,插入后将使用xp_cmd_shell删除每个文件。xml文件在文件夹中每5-10分钟生成一次。