详解数据库导出成excel的sql语句_Mssql数据库教程
推荐:从Access数据库到SQL Server高手之前编写软件都是ASP+Access,由于看到SQL Server数据库中的一些功能确实高过ACCESS,具体如下: 1、触发器: 有了触发器,也就是可以在增加一个数据的时候对应调用一个过程来维护数据库的完整性。 2、视图: 这个是我对SQL Server最感兴趣的一个功能,通过
有些软件,或者数据库支持将Excel中的内容导入到数据库中,然后可以乘胜sql语句,但是真正的想要达到自己的目的,还真的需要自己下一番功夫。而office中的好多东西都可以用到vbs,特别是excel这种有一定规则的软件。因此,我记录下部分用于演示的代码,待以后慢慢研究。
****************************************************************************************************************************************
代码一:其实是将sheet1中有一定规律的数据(数据库表名称以及后面跟着的该表的字段),映射到sheet2中。sheet2针对于sheet1来说,更像是一个目录。
****************************************************************************************************************************************
Option Explicit
'Author: LiSheng Feng (eBis)
Sub SyncIndex()
Sheets(2).Cells.Clear
Dim LinkCurrentRow As Long
LinkCurrentRow = 1
Dim CellString As String
Dim LinkName As String
Dim i As Integer
For i = 2 To Sheets(1).Cells(1, 1).SpecialCells(xlCellTypeLastCell).Row
If Sheets(1).Cells(i, 1) = "" Then
CellString = UCase(Sheets(1).Cells(i, 2))
If CellString <> "" Then
If InStr(CellString, " VIEW ") = 0 Then
If Not (Left(CellString, 3) = "IX_" Or InStr(CellString, "IDX") > 0 Or InStr(CellString, "INDEX") > 0) Then
LinkName = Sheets(1).Cells(i, 3)
If LinkName = "" Then
LinkName = CellString
End If
Sheets(2).Hyperlinks.Add Anchor:=Sheets(2).Cells(LinkCurrentRow, 1), Address:="", _
SubAddress:=Sheets(1).Name + "!B" + CStr(i), TextToDisplay:=LinkName
Sheets(2).Cells(LinkCurrentRow, 2) = UCase(Sheets(1).Cells(i, 2))
LinkCurrentRow = LinkCurrentRow + 1
End If
End If
End If
End If
Next i
Sheets(2).Columns(1).AutoFit
Sheets(2).Columns(2).AutoFit
MsgBox "同步完成", vbOKOnly + vbInformation
End Sub
****************************************************************************************************************************************
代码二:将sheet1中多个数据库的表结构标称sql语句
****************************************************************************************************************************************
Sub createSql()
Sheets(5).Cells.Clear
Dim LinkCurrentRow As Long
LinkCurrentRow = 1
Dim CellString As String
Dim LinkName As String
Dim i As Integer
Dim sqlStr As String
Dim tblName As String
Dim tblStart As Boolean
Dim tblCount As Integer
Dim tblSql As String
Dim fldName As String '字段名称
Dim fldType As String '字段类型
tblStart = False
tblCount = 0
For i = 2 To Sheets(1).Cells(1, 1).SpecialCells(xlCellTypeLastCell).Row
If Sheets(1).Cells(i, 1) = "" Then '表名
If Sheets(1).Cells(i, 3) <> "" Then '剔除IDX
If tblCount <> 0 Then
Sheets(5).Cells(tblCount + 1, 1) = Left(tblSql, Len(tblSql) - 2) & ") ON [PRIMARY]" '删除最有一个,和回车后增加语句
tblSql = ""
End If
tblCount = tblCount + 1
tblName = Sheets(1).Cells(i, 2)
tblSql = "Create TABLE dbo.[" & tblName & "]("
End If
Else '字段名称
'eg: "[ShipName_EN] [nvarchar](100) COLLATE Chinese_PRC_CI_AS NOT NULL,"
fldName = "[" & Sheets(1).Cells(i, 2) & "]"
fldType = GetFieldType(Sheets(1).Cells(i, 4))
If fldName <> "" Then
tblSql = tblSql & fldName & " " & fldType & "," & vbCr
End If
End If
Next i
End Sub
Function GetFieldType(s As String) As String
Dim ret As String
Dim idxlft, idxrgt As Integer
If s <> "" Then
idxlft = InStr(s, "(")
idxrgt = InStr(s, ")")
If (idxlft > 0) And (idxrgt > 0) Then
ret = "[" & Mid(s, 1, idxlft - 1) & "]" & Mid(s, idxlft, Len(s) - idxlft + 1)
Else
ret = s
End If
End If
GetFieldType = ret
End Function
****************************************************************************************************************************************
代码三:根据数据库表中的数据(不再是表结构,而是数据),生成sql语句并保存到文件中。
****************************************************************************************************************************************
'最大行数
Const MAX_NUM_ROW = 5000
'导出文件路径所在单元格
Const PATH_OUTPUT_ROW = 3
Const PATH_OUTPUT_COL = 3
'定义列常量
Const NAME_COL = 1
Const GENDER_COL = 2
Const PHONE_COL = 3
Const EMAIL_COL = 4
'读取数据开始行数
Const START_ROW = 5
'定义数据实体类
Private Type Tmplt
NAME As String
GENDER As String
PHONE As String
EMAIL As String
End Type
'行数变量
Dim noOfTmplts As Integer
'数据实体类数组
Dim TmpltArray(MAX_NUM_ROW) As Tmplt
'点击按钮触发事件
Private Sub CommandButton1_Click()
generateSQL
End Sub
'生成SQL
Private Sub generateSQL()
makedir
initData
writeToFile
End Sub
'构建文件输出路径
Private Sub makedir()
On Error Resume Next
MkDir Sheet1.Cells(PATH_OUTPUT_ROW, PATH_OUTPUT_COL)
End Sub
'读取Excel数据,填充实体类数组
Private Sub initData()
Erase TmpltArray
noOfTmplts = 0
Dim j As Integer
'循环读取Excel数据行
For j = START_ROW To MAX_NUM_ROW
TmpltArray(noOfTmplts).NAME = Sheet1.Cells(j, NAME_COL)
TmpltArray(noOfTmplts).GENDER = Sheet1.Cells(j, GENDER_COL)
TmpltArray(noOfTmplts).PHONE = Sheet1.Cells(j, PHONE_COL)
TmpltArray(noOfTmplts).EMAIL = Sheet1.Cells(j, EMAIL_COL)
noOfTmplts = noOfTmplts + 1
Next
End Sub
'读取实体类数组,生成SQL并写入文件
Private Sub writeToFile()
Dim lvOutputPath As String
'输出文件路径
lvOutputPath = Sheet1.Cells(PATH_OUTPUT_ROW, PATH_OUTPUT_COL)
If lvOutputPath = "" Then
MsgBox "没有找到输出文件路径!"
Exit Sub
End If
fileNum = FreeFile
'打开输出文件
Open lvOutputPath For Output As fileNum
Dim lvUserSql As String
Dim nameStr As String
Dim genderStr As String
Dim phoneStr As String
Dim emailStr As String
'循环生成SQL
For j = 0 To noOfTmplts - 1
nameStr = TmpltArray(j).NAME
genderStr = TmpltArray(j).GENDER
phoneStr = TmpltArray(j).PHONE
emailStr = TmpltArray(j).EMAIL
If nameStr <> "" Then
lvUserSql = "Insert into Students(name,gender,phone,email) values('" & nameStr & "','" & genderStr & "','" & phoneStr & "','" & emailStr & "');"
Print #fileNum, lvUserSql
End If
Next
Close fileNum
MsgBox "文件生成完成!"
Exit Sub
Err_Open_File:
Close lvFileNum
If Err.Number = 76 Then
'路径未找到
MsgBox Err.Description
Exit Sub
Else
MsgBox Err.Description
Exit Sub
End If
End Sub
****************************************************************************************************************************************
这些代码都是卸载宏里面的,到时候执行宏就可以了。
分享:解读五种查询数据库中重复记录的方法1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select*frompeople wherepeopleIdin(selectpeopleIdfrompeoplegroupbypeopleIdhavingcount (peopleId)1) 2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留
- sql 语句练习与答案
- 深入C++ string.find()函数的用法总结
- SQL Server中删除重复数据的几个方法
- sql删除重复数据的详细方法
- SQL SERVER 2000安装教程图文详解
- 使用sql server management studio 2008 无法查看数据库,提示 无法为该请求检索数据 错误916解决方法
- SQLServer日志清空语句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸载方法(其他版本类似)
- sql server 2008 不允许保存更改,您所做的更改要求删除并重新创建以下表
- SQL Server 2008 清空删除日志文件(瞬间日志变几M)
- Win7系统安装MySQL5.5.21图解教程
- 将DataTable作为存储过程参数的用法实例详解
Mssql数据库教程Rss订阅编程教程搜索
Mssql数据库教程推荐
猜你也喜欢看这些
- MySQL数据库INSERT、UPDATE、DELETE以及REPLACE语句的用法详解
- Mysql中“Insert into xxx on duplicate key update”问题
- Mysql中的find_in_set的使用方法介绍
- 基于mysql查询语句的使用详解
- 解析mysql中:单表distinct、多表group by查询去除重复记录
- SQL提示Login failed for user#039;sa#039;错误的解决方案
- MySQL数据库InnoDB数据恢复工具的使用小结详解
- MySQL 生成随机密码
- mysql手动删除BINLOG的方法
- 深入mysql "ON DUPLICATE KEY UPDATE" 语法的分析
- 相关链接:
- 教程说明:
Mssql数据库教程-详解数据库导出成excel的sql语句。