--试试这个
sp_makewebtask N'D;\aa.xml',N'select * from yourtable for xml RAW'
sp_makewebtask N'D;\aa.xml',N'select * from yourtable for xml RAW'
解决方案 »
- 求一个SQL语句
- 求1SQL,在线等答案,高手帮忙!
- +++++++++求一语句,没分了,只能给朋友们送10分,先在此感谢回答问题的朋友++++++++++++
- 装sql server 2000到最周最后一步老执行不下去
- 请教一下这个sql语句?
- 在一个数据表中统计另一个数据表中的数据
- Sql Server2005 启动不了,错误日志如下,在线等!
- 试了好几次,报错误的一条语句..关于if()..关联两个表..在线等结贴
- 在自定義函數中使用execute問題﹐請高手幫忙!!!
- ODBC DSN问题 50分
- ASP程序在win2000 ,sqlserver2000上稳定运行,但在win2003,sqlserver2000下却不能连接数据库,急呀。
- 修改表结构中的一个较难的问题
我简单的举例了2种通过ADO调用SQL SERVER2000数据库XML的方法,不知是否满足你的要求。因为我觉得你的方法好像是绕了一个圈子,这个问题通过CLIENT段的工具会比较好实现,现在的ADO,ADO.NET都提供了很多的支持XML的函数。
而且,通过sp_OASetProperty 的方法的效率也不是很好。我个儿一般不建议使用这个方法。
我下面介绍2种方法:1.通过ADO的commandText属性来调用:
但这个会有所限制,首先对于大容量的数据的效率不高。而且这个方式只支持UNICODE,所以,如果你的XML不是这种编码也许会出现乱码。(就是你遇到的情况)
下面我先给出第一种代码:
Const MSSQLXML_DIALECT = "{5D531CB2-E6Ed-11D2-B252-00C04F681B71}"
Const adExecuteStream = 1024
Dim conDB 'As ADODB.Connection
Dim cmdXML 'As ADODB.CommandSet conDB = CreateObject("ADODB.Connection")' Connect to the database using Integrated Security.
With conDB
.Provider = "SQLOLEDB"
.ConnectionString = "DATA SOURCE=(local);" & _
"INITIAL CATALOG=Northwind;" & _
"INTEGRATED SECURITY=SSPI;"
.Open
End With
Set cmdXML = CreateObject("ADODB.Command")'Assign the Connection to the Command
Set cmdXML.ActiveConnection = conDB'Create query document
Dim strQry 'As String
strQry = "<Invoice xmlns:sql='urn:schemas-microsoft-com:xml-sql'>"
strQry = strQry & "<sql:query>"
strQry = strQry & "SELECT OrderID, OrderDate FROM Orders "
strQry = strQry & "WHERE OrderID = 10248 FOR XML AUTO"
strQry = strQry & "</sql:query></Invoice>"'Specify the MSSQLXML dialect and assign the query.
cmdXML.Dialect = MSSQLXML_DIALECT
cmdXML.CommandText = strQry'Create Stream object for results.
Dim strmXMLOut 'AS ADODB.Stream
Set strmXMLout = CreateObject("ADODB.Stream")'Assign the result stream.
strmXMLout.Open
cmdXML.Properties("Output Stream") = strmXMLout'Execute the query.
cmdXML.Execute , , adExecuteStream'这个实例是将XML在一个消息框中,你也可以用其它方式显示.
Dim strXML
strXML = Replace(strmXMLOut.ReadText,">", ">" & chr(10)+ chr(13))
MsgBox strXML, vbInformation, "XML Invoice"
通过stream对象。SQLOLEDB PROVIDER支持command对象的commandstream属性,它可以通过stream来提交。
CONST adExecuteStream = 1024
CONST adWriteChar = 0
Dim conDB 'AS ADODB.Connection
Dim cmdXML 'AS ADODB.CommandSet conDB = CreateObject("ADODB.Connection")' Connect to the database using Integrated Security.
With conDB
.Provider = "SQLOLEDB"
.ConnectionString = "DATA SOURCE=(local); INITIAL CATALOG=Northwind; INTEGRATED SECURITY=SSPI;"
.Open
End With
Set cmdXML = CreateObject("ADODB.Command")'Assign the Connection object to the Command object.
Set cmdXML.ActiveConnection = conDB'Create Stream object for inbound query.
Dim stmXMLin 'AS ADODB.Stream
Set stmXMLin = CreateObject("ADODB.Stream")'Create the query template.
Dim strQry 'AS String
strQry = "<Invoice xmlns:sql='urn:schemas-microsoft-com:xml-sql'>"
strQry = strQry & "<sql:query>"
strQry = strQry & "SELECT OrderID, OrderDate FROM Orders "
strQry = strQry & "WHERE OrderID = 10248 FOR XML AUTO"
strQry = strQry & "</sql:query></Invoice>"'Write query to inbound stream.
stmXMLin.Open
stmXMLin.WriteText strQry, adWriteChar'Set Stream object position to the beginning of the stream.
stmXMLin.Position = 0'Assign Stream object to Command object.
Set cmdXML.CommandStream = stmXMLin'Create stream for outbound result.
Dim strmXMLout 'AS ADODB.Stream
Set strmXMLout = CreateObject("ADODB.Stream")'Assign the result stream.
strmXMLout.Open
cmdXML.Properties("Output Stream") = strmXMLout'Execute the query
cmdXML.Execute, , adExecuteStream'Process the results
Dim strXML 'AS String
strXML = Replace(strmXMLOut.ReadText,">", ">" & chr(10)+ chr(13))
MsgBox strXML, vbInformation, "XML Invoice"
drop procedure [dbo].[p_savexml]
GO/*--存为XML 将表/查询存储为标准的XML文件--邹建 2003.12(引用请保留此信息)--*//*--调用示例
--用SQL用winows身份验证的情况
exec p_savexml @sql='地区资料',@fname='c:\地区资料.xml' --用指定的用户
exec p_savexml @sql='地区资料',@fname='c:\地区资料.xml',@userid='sa'
--*/
create proc p_savexml
@sql varchar(8000), --要保存的表/视图/SQL查询语句
@fname varchar(1000)='c:\tmp.xml', --保存的XML文件名
@userid varchar(50)='', --用户名,如果为nt验证方式,则为''
@password varchar(50)='' --密码
as
declare @err int,@src varchar(255),@desc varchar(255)
declare @obj int,@constr varchar(1000)
if isnull(@userid,'')=''
set @constr='Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog='
+db_name()+';Data Source='+@@servername
else
set @constr='Provider=SQLOLEDB.1;Persist Security Info=True;'
+'User ID='+@userid+';Password='+isnull(@password,'')
+';Initial Catalog='+db_name()+';Data Source='+@@servernameexec @err=sp_oacreate 'adodb.recordset',@obj out
if @err<>0 goto lberrexec @err=sp_oamethod @obj,'open',null,@sql,@constr
if @err<>0 goto lberrset @sql='del '+@fname
exec master..xp_cmdshell @sql,no_output
exec @err=sp_oamethod @obj,'save',null,@fname,1
if @err<>0 goto lberrexec @err=sp_oadestroy @obj
returnlberr:
exec sp_oageterrorinfo 0,@src out,@desc out
select cast(@err as varbinary(4)) as 错误号
,@src as 错误源,@desc as 错误描述
go