2013-04-15 22 views
1

Im和,如果我在C的文件名替换行所有正常工作改变使用以下代码硬编码路径变量在MS SQL

DECLARE @Directory varchar(100) 
SELECT @Directory = 'c:\XML\' 

DECLARE @FileExist int 
DECLARE @FileName varchar(500),@DeleteCommand varchar(1000),@FullFileName varchar(500), @SQLFullFileName varchar(500) 


DECLARE @X XML 
SELECT @X = CONVERT(xml,[ICECAT-interface],2) 
FROM OPENROWSET(BULK 'C:\XML\1382.xml',SINGLE_BLOB) AS Import([ICECAT-interface]) 

select P1.X.value('@ID', 'int') as ProductID, 
     P2.X.value('@ID', 'int') as ProductID 


from @X.nodes('/ICECAT-interface/Product') as P1(X) 
cross apply P1.X.nodes('ProductRelated') as PR(X) 
cross apply PR.X.nodes('Product') as P2(X) 

:\ XML \ 1382.xml与此线

SELECT @X = CONVERT(xml,[ICECAT-interface],2) 
FROM OPENROWSET(BULK ' + @FullFileName + ' ,SINGLE_BLOB) AS Import([ICECAT-interface]) 

它错误说文件不存在,但在调试模式下,我可以看到变量@FullFileName存在并且是正确的。

任何输入,将不胜感激。

感谢

约翰

+0

@FullFileName如何声明/填充? –

+0

嗨亚伦,我编辑代码,因为我不能粘贴它。 1秒 –

+1

需要说明的是,您确认文件与SQL Server实例正在运行的计算机存在于同一台计算机上吗? –

回答

3

你不能一个变量传递给OPENROWSET(),所以你需要使用动态SQL。这是未经测试,但应该给你一个想法:

DECLARE @x XML, @sql NVARCHAR(MAX); 

SELECT @sql = N'SELECT @X = CONVERT(xml,[ICECAT-interface],2) 
FROM OPENROWSET(BULK ''' + @FullFileName + ''' ,SINGLE_BLOB) 
---------------------^^ escaped quotes are important 
AS Import([ICECAT-interface]);'; 

EXEC sp_executesql @sql, N'@x XML OUTPUT', @x OUTPUT; 

SELECT @x;