excel生成mysql语句_通过SQL语句直接实现Excel与数据库的导入导出
1、在SQL數(shù)據(jù)庫中直接從Excel里面查詢數(shù)據(jù):
select \* from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Excel 5.0;HDR=YES;DATABASE=c:\\test.xls',sheet1$)
2、從Excel文件中,導(dǎo)入數(shù)據(jù)到SQL數(shù)據(jù)庫中,
select?\*?into?表?from
?OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
?,'Excel?5.0;HDR=YES;DATABASE=c:\\test.xls',sheet1$)
3、從SQL數(shù)據(jù)庫中,導(dǎo)出數(shù)據(jù)到Excel(excel存在),
insert?into?OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
?,'Excel?5.0;HDR=YES;DATABASE=c:\\test.xls',sheet1$)
?select?\*?from?表
4、從SQL數(shù)據(jù)庫中,導(dǎo)出數(shù)據(jù)到Excel(excel不存在),
\---- 導(dǎo)出表
EXEC?master..xp\_cmdshell?'bcp?數(shù)據(jù)庫名.dbo.表名?out?"c: est.xls"?/c?-/S"服務(wù)器名"?/U"用戶名"?-P"密碼"'
---- 導(dǎo)出查詢語句
EXEC?master..xp\_cmdshell?'bcp?"SELECT?au\_fname,?au\_lname?FROM?pubs..authors?ORDER?BY?au\_lname"?queryout?"c: est.xls"?/c?-/S"服務(wù)器名"?/U"用戶名"?-P"密碼"'
5、導(dǎo)入導(dǎo)出的存儲過程
\--下面是導(dǎo)出真正Excel文件的方法:(請將一下所有代碼復(fù)制到存儲過程中)

ifexists?(select\*from?dbo.sysobjects?where?id?\=object\_id(N'\[dbo\].\[p\_exporttb\]')?andOBJECTPROPERTY(id,?N'IsProcedure')?\=1)
dropprocedure\[dbo\].\[p\_exporttb\]
GO

/\*\--數(shù)據(jù)導(dǎo)出EXCEL

?導(dǎo)出表中的數(shù)據(jù)到Excel,包含字段名,文件為真正的Excel文件
?,如果文件不存在,將自動創(chuàng)建文件
?,如果表不存在,將自動創(chuàng)建表
?基于通用性考慮,僅支持導(dǎo)出標準數(shù)據(jù)類型

\--鄒建?2003.10(引用請保留此信息)--\*/

/\*\--調(diào)用示例

?p\_exporttb?@tbname='地區(qū)資料',@path='c:',@fname='aa.xls'
\--\*/
createproc?p\_exporttb
@tbname?sysname,????\--要導(dǎo)出的表名
@pathnvarchar(1000),???\--文件存放目錄
@fnamenvarchar(250)\=''\--文件名,默認為表名
as
declare@errint,@srcnvarchar(255),@descnvarchar(255),@outint
declare@objint,@constrnvarchar(1000),@sqlvarchar(8000),@fdlistvarchar(8000)

\--參數(shù)檢測
ifisnull(@fname,'')\=''set@fname\=@tbname+'.xls'

\--檢查文件是否已經(jīng)存在
ifright(@path,1)<>''set@path\=@path+''
createtable?#tb(a?bit,b?bit,c?bit)
set@sql\=@path+@fname
insertinto?#tb?exec?master..xp\_fileexist?@sql

\--數(shù)據(jù)庫創(chuàng)建語句
set@sql\=@path+@fname
ifexists(select1from?#tb?where?a\=1)
?set@constr\='DRIVER={Microsoft?Excel?Driver?(\*.xls)};DSN='''';READONLY=FALSE'
???????+';CREATE\_DB="'+@sql+'";DBQ='+@sql
else
?set@constr\='Provider=Microsoft.Jet.OLEDB.4.0;Extended?Properties="Excel?8.0;HDR=YES'
????+';DATABASE='+@sql+'"'


\--連接數(shù)據(jù)庫
exec@err\=sp\_oacreate?'adodb.connection',@obj?out
if@err<>0goto?lberr

exec@err\=sp\_oamethod?@obj,'open',null,@constr
if@err<>0goto?lberr

/\*\--如果覆蓋已經(jīng)存在的表,就加上下面的語句
\--創(chuàng)建之前先刪除表/如果存在的話
select?@sql='drop?table?\['+@tbname+'\]'
exec?@err=sp\_oamethod?@obj,'execute',@out?out,@sql
\--\*/

\--創(chuàng)建表的SQL
select@sql\='',@fdlist\=''
select@fdlist\=@fdlist+',\['+a.name+'\]'
?,@sql\=@sql+',\['+a.name+'\]?'
??+case
???when?b.name?like'%char'
???thencasewhen?a.length\>255then'memo'
????else'text('+cast(a.length?asvarchar)+')'end
???when?b.name?like'%int'or?b.name\='bit'then'int'
???when?b.name?like'%datetime'then'datetime'
???when?b.name?like'%money'then'money'
???when?b.name?like'%text'then'memo'
???else?b.name?end
FROM?syscolumns?a?leftjoin?systypes?b?on?a.xtype\=b.xusertype
where?b.name?notin('image','uniqueidentifier','sql\_variant','varbinary','binary','timestamp')
?andobject\_id(@tbname)\=id
select@sql\='create?table?\['+@tbname
?+'\]('+substring(@sql,2,8000)+')'
?,@fdlist\=substring(@fdlist,2,8000)
exec@err\=sp\_oamethod?@obj,'execute',@out?out,@sql
if@err<>0goto?lberr

exec@err\=sp\_oadestroy?@obj

\--導(dǎo)入數(shù)據(jù)
set@sql\='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel?8.0;HDR=YES;IMEX=1
???;DATABASE='+@path+@fname+''',\['+@tbname+'$\])'

exec('insert?into?'+@sql+'('+@fdlist+')?select?'+@fdlist+'?from?'+@tbname)

return

lberr:
?exec?sp\_oageterrorinfo?0,@src?out,@desc?out
lbexit:
?selectcast(@errasvarbinary(4))?as?錯誤號
??,@srcas?錯誤源,@descas?錯誤描述
?select@sql,@constr,@fdlist
go



ifexists?(select\*from?dbo.sysobjects?where?id?\=object\_id(N'\[dbo\].\[p\_exporttb\]')?andOBJECTPROPERTY(id,?N'IsProcedure')?\=1)
dropprocedure\[dbo\].\[p\_exporttb\]
GO

/\*\--數(shù)據(jù)導(dǎo)出EXCEL

?導(dǎo)出查詢中的數(shù)據(jù)到Excel,包含字段名,文件為真正的Excel文件
?如果文件不存在,將自動創(chuàng)建文件
?如果表不存在,將自動創(chuàng)建表
?基于通用性考慮,僅支持導(dǎo)出標準數(shù)據(jù)類型

\--鄒建?2003.10(引用請保留此信息)--\*/

/\*\--調(diào)用示例

?p\_exporttb?@sqlstr='select?\*?from?地區(qū)資料'
??,@path='c:',@fname='aa.xls',@sheetname='地區(qū)資料'
\--\*/
createproc?p\_exporttb
@sqlstrvarchar(8000),???\--查詢語句,如果查詢語句中使用了order?by?,請加上top?100?percent
@pathnvarchar(1000),???\--文件存放目錄
@fnamenvarchar(250),???\--文件名
@sheetnamevarchar(250)\=''\--要創(chuàng)建的工作表名,默認為文件名
as
declare@errint,@srcnvarchar(255),@descnvarchar(255),@outint
declare@objint,@constrnvarchar(1000),@sqlvarchar(8000),@fdlistvarchar(8000)

\--參數(shù)檢測
ifisnull(@fname,'')\=''set@fname\='temp.xls'
ifisnull(@sheetname,'')\=''set@sheetname\=replace(@fname,'.','#')

\--檢查文件是否已經(jīng)存在
ifright(@path,1)<>''set@path\=@path+''
createtable?#tb(a?bit,b?bit,c?bit)
set@sql\=@path+@fname
insertinto?#tb?exec?master..xp\_fileexist?@sql

\--數(shù)據(jù)庫創(chuàng)建語句
set@sql\=@path+@fname
ifexists(select1from?#tb?where?a\=1)
?set@constr\='DRIVER={Microsoft?Excel?Driver?(\*.xls)};DSN='''';READONLY=FALSE'
???????+';CREATE\_DB="'+@sql+'";DBQ='+@sql
else
?set@constr\='Provider=Microsoft.Jet.OLEDB.4.0;Extended?Properties="Excel?8.0;HDR=YES'
????+';DATABASE='+@sql+'"'

\--連接數(shù)據(jù)庫
exec@err\=sp\_oacreate?'adodb.connection',@obj?out
if@err<>0goto?lberr

exec@err\=sp\_oamethod?@obj,'open',null,@constr
if@err<>0goto?lberr

\--創(chuàng)建表的SQL
declare@tbname?sysname
set@tbname\='##tmp\_'+convert(varchar(38),newid())
set@sql\='select?\*?into?\['+@tbname+'\]?from('+@sqlstr+')?a'
exec(@sql)

select@sql\='',@fdlist\=''
select@fdlist\=@fdlist+',\['+a.name+'\]'
?,@sql\=@sql+',\['+a.name+'\]?'
??+case
???when?b.name?like'%char'
???thencasewhen?a.length\>255then'memo'
????else'text('+cast(a.length?asvarchar)+')'end
???when?b.name?like'%int'or?b.name\='bit'then'int'
???when?b.name?like'%datetime'then'datetime'
???when?b.name?like'%money'then'money'
???when?b.name?like'%text'then'memo'
???else?b.name?end
FROM?tempdb..syscolumns?a?leftjoin?tempdb..systypes?b?on?a.xtype\=b.xusertype
where?b.name?notin('image','uniqueidentifier','sql\_variant','varbinary','binary','timestamp')
?and?a.id\=(select?id?from?tempdb..sysobjects?where?name\=@tbname)

if@@rowcount\=0return

select@sql\='create?table?\['+@sheetname
?+'\]('+substring(@sql,2,8000)+')'
?,@fdlist\=substring(@fdlist,2,8000)

exec@err\=sp\_oamethod?@obj,'execute',@out?out,@sql
if@err<>0goto?lberr

exec@err\=sp\_oadestroy?@obj

\--導(dǎo)入數(shù)據(jù)
set@sql\='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel?8.0;HDR=YES
???;DATABASE='+@path+@fname+''',\['+@sheetname+'$\])'

exec('insert?into?'+@sql+'('+@fdlist+')?select?'+@fdlist+'?from?\['+@tbname+'\]')

set@sql\='drop?table?\['+@tbname+'\]'
exec(@sql)
return

lberr:
?exec?sp\_oageterrorinfo?0,@src?out,@desc?out
lbexit:
?selectcast(@errasvarbinary(4))?as?錯誤號
??,@srcas?錯誤源,@descas?錯誤描述
?select@sql,@constr,@fdlist
go
總結(jié)
以上是生活随笔為你收集整理的excel生成mysql语句_通过SQL语句直接实现Excel与数据库的导入导出的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql search yum_Cen
- 下一篇: MySQL的my.cnf文件(解决5.7