日期:2014-05-17  浏览次数:20404 次

XML与sql2005的存储过程

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

alter PROCEDURE dbo.up_xml1
@cxml xml
AS
BEGIN
SET NOCOUNT ON;
declare @idoc int; 
declare @doc xml;  
select @doc = bulkcolumn
from openrowset(
  bulk '''+@doc+''',
  single_blob
  ) as x 
  
exec sp_xml_preparedocument @Idoc output,@doc 
  
select * into #temp from openxml(@idoc, '/main/base ', 2)with (
[bookname]varchar(100),
[cbookname]varchar(100),
[ISBN]varchar(100),
[开本]varchar(100),
[链接]varchar(100)
)

END
select * from #temp
drop table #temp

GO

创建的时候提示 无法进行大容量加载。文件 "+@doc+" 不存在。
bulk 后面不能跟变量吗,还是我哪里写的不对,请指教!!

------解决方案--------------------
不能跟变量,

可以使用sp_executesql动态执行。
------解决方案--------------------
OPENROWSET 不接受参数变量。
参考:
http://technet.microsoft.com/zh-cn/library/ms190312.aspx

你在上面的地址直接:ctrl+F 可以找到“OPENROWSET 不接受参数变量”。

OPENDATASOURCE也不接受参数变量。

可以用exec 或是sp_executesql。

参考:
http://topic.csdn.net/t/20050530/08/4044702.html