zoukankan      html  css  js  c++  java
  • sql导入导出

    1. (转载)
    2. 1、在SQL数据库中直接从Excel里面查询数据: 
    3. select * from
    4.     OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
    5.     ,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$) 
    6. 2、从Excel文件中,导入数据到SQL数据库中, 
    7. select * into 表 from
    8. OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
    9. ,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$) 
    10. 3、从SQL数据库中,导出数据到Excel(excel存在), 
    11. insert into OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
    12. ,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$) 
    13. select * from 表 
    14. 4、从SQL数据库中,导出数据到Excel(excel不存在), 
    15. ---- 导出表
    16. EXEC master..xp_cmdshell 'bcp 数据库名.dbo.表名 out "c: est.xls" /c -/S"服务器名" /U"用户名" -P"密码"'
    17. ---- 导出查询语句
    18. EXEC master..xp_cmdshell 'bcp "Select au_fname, au_lname FROM pubs..authors orDER BY au_lname" queryout "c: est.xls" /c -/S"服务器名" /U"用户名" -P"密码"'
    19. 5、导入导出的存储过程 
    20. --下面是导出真正Excel文件的方法:(请将一下所有代码复制到存储过程中)
    21. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_exporttb]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) 
    22. drop procedure [dbo].[p_exporttb] 
    23. GO 
    24. /**//*--数据导出EXCEL
    25. 导出表中的数据到Excel,包含字段名,文件为真正的Excel文件 
    26. ,如果文件不存在,将自动创建文件 
    27. ,如果表不存在,将自动创建表 
    28. 基于通用性考虑,仅支持导出标准数据类型 
    29. --邹建 2003.10(引用请保留此信息)--*/
    30. /**//*--调用示例
    31. p_exporttb @tbname='地区资料',@path='c:',@fname='aa.xls'
    32. --*/
    33. create proc p_exporttb 
    34. @tbname sysname,    --要导出的表名
    35. @path nvarchar(1000),   --文件存放目录
    36. @fname nvarchar(250)='' --文件名,默认为表名
    37. as
    38. declare @err int,@src nvarchar(255),@desc nvarchar(255),@out int
    39. declare @obj int,@constr nvarchar(1000),@sql varchar(8000),@fdlist varchar(8000) 
    40. --参数检测
    41. if isnull(@fname,'')='' set @fname=@tbname+'.xls'
    42. --检查文件是否已经存在
    43. if right(@path,1)<>'' set @path=@path+''
    44. create table #tb(a bit,b bit,c bit) 
    45. set @sql=@path+@fname 
    46. insert into #tb exec master..xp_fileexist @sql 
    47. --数据库创建语句
    48. set @sql=@path+@fname 
    49. if exists(select 1 from #tb where a=1) 
    50. set @constr='DRIVER={Microsoft Excel Driver (*.xls)};DSN='''';READONLY=FALSE'
    51.        +';Create_DB="'+@sql+'";DBQ='+@sql 
    52. else
    53. set @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties="Excel 8.0;HDR=YES'
    54.     +';DATABASE='+@sql+'"'
    55. --连接数据库
    56. exec @err=sp_oacreate 'adodb.connection',@obj out
    57. if @err<>0 goto lberr 
    58. exec @err=sp_oamethod @obj,'open',null,@constr 
    59. if @err<>0 goto lberr 
    60. /**//*--如果覆盖已经存在的表,就加上下面的语句
    61. --创建之前先删除表/如果存在的话
    62. select @sql='drop table ['+@tbname+']'
    63. exec @err=sp_oamethod @obj,'execute',@out out,@sql 
    64. --*/
    65. --创建表的SQL
    66. select @sql='',@fdlist=''
    67. select @fdlist=@fdlist+',['+a.name+']'
    68. ,@sql=@sql+',['+a.name+'] '
    69.   +case
    70. when b.name like '%char'
    71. then case when a.length>255 then 'memo'
    72. else 'text('+cast(a.length as varchar)+')' end
    73. when b.name like '%int' or b.name='bit' then 'int'
    74. when b.name like '%datetime' then 'datetime'
    75. when b.name like '%money' then 'money'
    76. when b.name like '%text' then 'memo'
    77. else b.name end
    78. FROM syscolumns a left join systypes b on a.xtype=b.xusertype 
    79. where b.name not in('image','uniqueidentifier','sql_variant','varbinary','binary','timestamp') 
    80. and object_id(@tbname)=id 
    81. select @sql='create table ['+@tbname 
    82. +']('+substring(@sql,2,8000)+')'
    83. ,@fdlist=substring(@fdlist,2,8000) 
    84. exec @err=sp_oamethod @obj,'execute',@out out,@sql 
    85. if @err<>0 goto lberr 
    86. exec @err=sp_oadestroy @obj 
    87. --导入数据
    88. set @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel 8.0;HDR=YES;IMEX=1 
    89.    ;DATABASE='+@path+@fname+''',['+@tbname+'$])' 
    90. exec('insert into '+@sql+'('+@fdlist+') select '+@fdlist+' from '+@tbname) 
    91. return
    92. lberr: 
    93. exec sp_oageterrorinfo 0,@src out,@desc out
    94. lbexit: 
    95. select cast(@err as varbinary(4)) as 错误号 
    96.   ,@src as 错误源,@desc as 错误描述 
    97. select @sql,@constr,@fdlist 
    98. go 
    99. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_exporttb]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) 
    100. drop procedure [dbo].[p_exporttb] 
    101. GO 
    102. /**//*--数据导出EXCEL
    103. 导出查询中的数据到Excel,包含字段名,文件为真正的Excel文件 
    104. 如果文件不存在,将自动创建文件 
    105. 如果表不存在,将自动创建表 
    106. 基于通用性考虑,仅支持导出标准数据类型 
    107. --邹建 2003.10(引用请保留此信息)--*/
    108. /**//*--调用示例
    109. p_exporttb @sqlstr='select * from 地区资料'
    110.   ,@path='c:',@fname='aa.xls',@sheetname='地区资料'
    111. --*/
    112. create proc p_exporttb 
    113. @sqlstr varchar(8000),   --查询语句,如果查询语句中使用了order by ,请加上top 100 percent
    114. @path nvarchar(1000),   --文件存放目录
    115. @fname nvarchar(250),   --文件名
    116. @sheetname varchar(250)='' --要创建的工作表名,默认为文件名
    117. as
    118. declare @err int,@src nvarchar(255),@desc nvarchar(255),@out int
    119. declare @obj int,@constr nvarchar(1000),@sql varchar(8000),@fdlist varchar(8000) 
    120. --参数检测
    121. if isnull(@fname,'')='' set @fname='temp.xls'
    122. if isnull(@sheetname,'')='' set @sheetname=replace(@fname,'.','#') 
    123. --检查文件是否已经存在
    124. if right(@path,1)<>'' set @path=@path+''
    125. create table #tb(a bit,b bit,c bit) 
    126. set @sql=@path+@fname 
    127. insert into #tb exec master..xp_fileexist @sql 
    128. --数据库创建语句
    129. set @sql=@path+@fname 
    130. if exists(select 1 from #tb where a=1) 
    131. set @constr='DRIVER={Microsoft Excel Driver (*.xls)};DSN='''';READONLY=FALSE'
    132.        +';Create_DB="'+@sql+'";DBQ='+@sql 
    133. else
    134. set @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties="Excel 8.0;HDR=YES'
    135.     +';DATABASE='+@sql+'"'
    136. --连接数据库
    137. exec @err=sp_oacreate 'adodb.connection',@obj out
    138. if @err<>0 goto lberr 
    139. exec @err=sp_oamethod @obj,'open',null,@constr 
    140. if @err<>0 goto lberr 
    141. --创建表的SQL
    142. declare @tbname sysname 
    143. set @tbname='##tmp_'+convert(varchar(38),newid()) 
    144. set @sql='select * into ['+@tbname+'] from('+@sqlstr+') a'
    145. exec(@sql) 
    146. select @sql='',@fdlist=''
    147. select @fdlist=@fdlist+',['+a.name+']'
    148. ,@sql=@sql+',['+a.name+'] '
    149.   +case
    150. when b.name like '%char'
    151. then case when a.length>255 then 'memo'
    152. else 'text('+cast(a.length as varchar)+')' end
    153. when b.name like '%int' or b.name='bit' then 'int'
    154. when b.name like '%datetime' then 'datetime'
    155. when b.name like '%money' then 'money'
    156. when b.name like '%text' then 'memo'
    157. else b.name end
    158. FROM tempdb..syscolumns a left join tempdb..systypes b on a.xtype=b.xusertype 
    159. where b.name not in('image','uniqueidentifier','sql_variant','varbinary','binary','timestamp') 
    160. and a.id=(select id from tempdb..sysobjects where name=@tbname) 
    161. if @@rowcount=0 return
    162. select @sql='create table ['+@sheetname 
    163. +']('+substring(@sql,2,8000)+')'
    164. ,@fdlist=substring(@fdlist,2,8000) 
    165. exec @err=sp_oamethod @obj,'execute',@out out,@sql 
    166. if @err<>0 goto lberr 
    167. exec @err=sp_oadestroy @obj 
    168. --导入数据
    169. set @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel 8.0;HDR=YES 
    170.    ;DATABASE='+@path+@fname+''',['+@sheetname+'$])' 
    171. exec('insert into '+@sql+'('+@fdlist+') select '+@fdlist+' from ['+@tbname+']') 
    172. set @sql='drop table ['+@tbname+']'
    173. exec(@sql) 
    174. return
    175. lberr: 
    176. exec sp_oageterrorinfo 0,@src out,@desc out
    177. lbexit: 
    178. select cast(@err as varbinary(4)) as 错误号 
    179.   ,@src as 错误源,@desc as 错误描述 
    180. select @sql,@constr,@fdlist 
    181. go 
  • 相关阅读:
    程序员修炼之道:从小工到专家
    2020.12.16收获
    2020.12.15收获
    2020.12.14收获
    2020.12.13收获
    Android学习第二天——对Android的简单了解
    Java学习12.18
    考试加分项
    Java学习12.17
    Java建议
  • 原文地址:https://www.cnblogs.com/wuhen/p/1615184.html
Copyright © 2011-2022 走看看