Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 从数据库中选择xml文件名_Sql Server 2005 - Fatal编程技术网

Sql server 2005 从数据库中选择xml文件名

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

我有一个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(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分钟生成一次。