Ⅰ 在sql中如何将查询结果直接导出为EXCEL表格
SQL Server有一些工具可用来导出和导入数据。这些简单的工具,例如T-SQL的BULK INSERT语句,或者是BCP工具,都可以将数据以纯文本文件的形式传输。如果需要处理任何一种其他类型的文件的导入导出,则我们必须使用DTS设计器或者DTS向导构建一个DTS包。最终生成的DTS包是一个我们必须测试、维护和操作的独立的对象。而传输数据的工作则变得更加复杂,即使我们只是想要将一个简单的Excel文件传输到文件系统中。
这里,我建议使用一个简单,但是很有用的T-SQL 存储程序,它可以通过使用链接服务器(linked server)技术将数据导出到Excel 中。
为了实现导出,你必须首先创建一个空的有固定名字的Excel文件,并将其放置在服务器上。我把它命名为Empty.xls,并放置在c:temp的目录下。这个文件不会被删除,并且在装入数据之前,作为目标Excel文件的模板使用。
Empty.xls文件被构建的时候,只含有一个工作页,名为ExcelTable,其中的第一行(仅有的一行)包含如下字母: A,B,C,...Z。这些字母可作为Excel表的列名称。这意味着在一个查询中,我们可以导出26个列。(给定的存储程序代码可被修改,以支持结果集中含有更多的列的情况。只需要在Excel模板中简单地书写F1, F2 ,F3...,然后更改程序中相应列的列表即可反映出变化了。)
sp_write2Excel是一个T-SQL存储过程,它获取目标Excel文件的名字和路径,结果集中列的数量,以及T-SQL查询。在查询中应该使用转换函数将所有的非字符串数据导入列中,因为最终的Excel单元中数据实际上都是字符串格式的。
这个过程将empty.xls模板文件拷贝到新的目标Excel文件中。然后它再构建一个链接服务器到刚才的文件中,并使用动态的T-SQL来构建这个Excel文件,并且使用插入/选择语句来将数据写入其中。
以下是程序代码:
Create proc sp_write2Excel (@fileName varchar(100),
@NumOfColumns tinyint,
@query varchar(200))
as
begin
declare @dosStmt varchar(200)
declare @tsqlStmt varchar(500)
declare @colList varchar(200)
declare @charInd tinyint
set nocount on
-- 构建列的列表 A,B,C ...
-- 直到达到列的数量.
set @charInd=0
set @colList = 'A'
while @charInd < @NumOfColumns - 1
begin
set @charInd = @charInd + 1
set @colList = @colList + ',' + char(65 + @charInd)
end
-- 创建一个空的Excel 文件作为目标文件,通过拷贝模板Excel 文件来命名
set @dosStmt = ' c:tempempty.xls ' + @fileName
exec master..xp_cmdshell @dosStmt
-- 创建一个“临时”的链接服务器到刚才的文件中,以用于“导出”数据
EXEC sp_addlinkedserver 'ExcelSource',
'Jet 4.0',
'Microsoft.Jet.OLEDB.4.0',
@fileName,
NULL,
'Excel 5.0'
-- 构建一个T-SQL 语句,用于实际导出查询结果
-- 到目标链接服务器上的表中
set @tsqlStmt = 'Insert ExcelSource...[ExcelTable$] ' + ' ( ' + @colList + ' ) '+ @query
print @tsqlStmt
-- 执行动态的 TSQL语句
exec (@tsqlStmt)
-- 删除链接服务器
EXEC sp_dropserver 'ExcelSource'
set nocount off
end
GO
程序使用实例:
Use master
go
exec sp_write2Excel
--目标excel文件
'c:tempNorthProcts.xls' ,
-- 结果中列的数量
3,
-- 将要导出结果的查询
'select convert(varchar(10),ProctId),
ProctName,
Convert (varchar(20),UnitPrice) from Northwind..Procts'
结论,这个程序可作为一个通用的工具将数据导出到Excel工作页中,而BCP工具则只能将数据导出到文本文件中。
我们可以使用这个程序来代替DTS包设计器,以及DTS向导,每当需要调用这样的动作的时候,都可以用它将数据导出到excel 文件中。
Ⅱ 怎样用SQL命令生成Excel表格
--如果从SQL数据库中,导出数据到Excel,如果Excel文件已经存在,而且已经按照要接收的数据创建好表头,就可以简单的用:
insert into OPENROWSET( 'MICROSOFT.JET.OLEDB.4.0 '
, 'Excel 5.0;HDR=YES;DATABASE=c:\test.xls ',sheet1$)
select * from 表
--如果Excel文件不存在,也可以用BCP来导成类Excel的文件,注意大小写:
--导出表的情况
EXEC master..xp_cmdshell 'bcp 数据库名.dbo.表名 out "c:\test.xls " /c -/S "服务器名 " /U "用户名 " -P "密码 " '
--导出查询的情况
EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname " queryout "c:\test.xls " /c -/S "服务器名 " /U "用户名 " -P "密码 " '
Ⅲ 怎么使用Excel提取sql server数据库数据,自动生成报表求大神解答,万分感谢。
你可以先设计一个视图View 就是你报表需要的额数据 然后导出数据到excel
Ⅳ 我想知道把数据从数据库中取出之后,怎么做能到处Excel表格或Word
一般的软件都会在“预览”里吧,预览上方会有一个“保存报表”,旁边的向下箭头所指的地方就是到处excel表格,你可以试一下。你的问题确实不完整,因为我们并不知道你的软件是用的什么样子的,不管怎么样我尽力啦哈哈
Ⅳ SQL数据库的表里面的数据怎么导出到EXCEL里面
ASP实例代码,直接将数据库中的数据导出到EXCEL电子表中:
<!--#includefile="../conn.asp"-->
<%
dims,sql,filename,fs,myfile,x
Setfs=server.CreateObject("scripting.filesystemobject")
'--假设你想让生成的EXCEL文件做如下的存放
filename=Server.MapPath("users.xls")
'--如果原来的EXCEL文件存在的话删除它
iffs.FileExists(filename)then
fs.DeleteFile(filename)
endif
'--创建EXCEL文件
setmyfile=fs.CreateTextFile(filename,true)
'Setrs=Server.CreateObject("ADODB.Recordset")
'--从数据库中把你想放到EXCEL中的数据查出来
'sql="select*fromTb_Execlorderbyiddesc"
'rs.Opensql,conn
StartTime=Request("StartTime")
EndTime=Request("EndTime")
StartEndTime="AddTimebetween#"&StartTime&"00:00:00#and#"&EndTime&"23:59:59#"
strSql="select*frommyeky_myusr"
SetrstData=conn.execute(strSql)
ifnotrstData.EOFandnotrstData.BOFthen
dimtrLine,responsestr
strLine=""
ForeachxinrstData.fields
strLine=strLine&x.name&chr(9)
Next
'--将表的列名先写入EXCEL
myfile.writelinestrLine
DowhileNotrstData.EOF
strLine=""
foreachxinrstData.Fields
strLine=strLine&x.value&chr(9)
next
myfile.writelinestrLine
rstData.MoveNext
loop
endif
Response.Write"生成EXCEL文件成功,点击<ahref=""users.xls""target=""_blank"">下载</a>!"
rstData.Close
setrstData=nothing
Conn.Close
SetConn=nothing
%>
Ⅵ VB 从SQL数据库中把数据导出到Excel表格中,怎么写
SubdataToExcel()
DimconnAsString
DimrsAsNewADODB.Recordset
DimexcelAsObject
DimworkbookAsObject
DimsheetAsObject
Dimi&,j&
'SQL数据库的连接字串
conn="Provider=SQLOLEDB.1;Datasource=服务器地址;initialcatalog=数据库名称;UserId=数据库登录账号;Password=数据库登录账号"
'打开到sql的连接,读取xxx表数据到rs
rs.Open"select*fromxxx",conn,adOpenKeyset,adLockReadOnly
'excel对象、工作簿、工作表
Setexcel=CreateObject("Excel.Application")
Setworkbook=excel.workbooks().Add()
Setsheet=workbook.sheets(1)
excel.Visible=True
'循环读取rs并写入到excel
Fori=1Tors.Fields.Count
j=1
rs.MoveFirst
DoWhileNotrs.EOF
sheet.cells(j,i)=rs.Fields(i-1).Value
rs.MoveNext
j=j+1
Loop
Next
rs.Close
Setrs=Nothing
EndSub
Ⅶ 怎么从mysql数据库导出数据成excel表格
方法一
用mysql的命令和shell
select * into outfile './bestlovesky.xls' from bestlovesky where 1 order by id desc limit 0, 50;
方法二
把bestlovesky.xls以文本方式打开,然后另存为,在编码选择ansi编码,保存
echo "select id,name from bestlovesky where 1 order by id desc limit 0, 50;"| /usr/local/mysql/bin/mysql -h127.0.0.1-uroot -p123456 > /data/bestlovesky.xls
方法三
mysql -uroot -p -e "select * from test.table2 " > d:a.xsl
Ⅷ 如何使用C#从数据库中提取数据并利用Excel做成报表
可以先做成报表,再导出成Excel
关键字:rdlc
Ⅸ 怎样将sql server2008中的数据库导出成excel表格
用SQL Server 2008中的导入/导出工具,数据源为SQL Server ,目标为Excel。