比较两个SQLSERVER的数据结构的不同

该程序用于比较两个SQLSERVER数据库之间的数据结构差异,包括表的结构、存储过程、函数、视图和触发器。它会检测并列出缺少的表、字段以及不同之处,并将结果保存到日志文件中。
摘要由CSDN通过智能技术生成

 Option Explicit
'------------------------------------------------------------
'比较两个SQLSERVER的数据结构的不同  作者:陈炎和
'------------------------------------------------------------
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

Private Cnn1 As ADODB.Connection, Cnn2 As ADODB.Connection


Private Sub main()
Dim ServerName As String, DataBase As String, UserName As String, password As String
Dim iniName As String
iniName = App.Path & IIf(Len(App.Path) > 3, "/", "") & App.EXEName & ".ini"
Set Cnn1 = New ADODB.Connection
   ServerName = GetProfileString("DataBase1", "serverName", "", iniName)(0)
   DataBase = GetProfileString("DataBase1", "database", "", iniName)(0)
   password = GetProfileString("DataBase1", "password", "", iniName)(0)
   UserName = GetProfileString("DataBase1", "username", "", iniName)(0)
Call conn(Cnn1, ServerName, DataBase, UserName, password)
Call createProc(Cnn1)
Set Cnn2 = New ADODB.Connection

   ServerName = GetProfileString("DataBase2", "serverName", "", iniName)(0)
   DataBase = GetProfileString("DataBase2", "database", "", iniName)(0)
   password = GetProfileString("DataBase2", "password", "", iniName)(0)
   UserName = GetProfileString("DataBase2", "username", "", iniName)(0)
Call conn(Cnn2, ServerName, DataBase, UserName, password)
Call createProc(Cnn2)
Call writeLog
End Sub
'--------------------------------------------
'写入文件
'--------------------------------------------
Private Sub writeLog()
 Dim fn As Integer
 On Error GoTo errSave
 fn = FreeFile(0)
 Open App.Path & IIf(Len(App.Path) > 3, "/", "") & App.EXEName & ".log" For Output As #fn
 Print #fn, checkTable()
 Print #fn, CheckProc()
 Close #fn
 MsgBox "比较完成,结果写入" & App.EXEName & ".log"
 Exit Sub
errSave:
   If Err > 0 Then MsgBox "错误:" & Err & " " & Error$
   On Error Resume Next
   If fn > 0 Then Close #fn
End Sub

'--------------------------------------------
'比校两个数据库中的所有表及字段
'--------------------------------------------
Private Function checkTable() As String
Dim rec1 As ADODB.Recordset, rec2 As ADODB.Recordset
Dim tablename As String, fieldname As String, i As Integer, flag As Boolean
Dim Msg As String
Set rec1 = getTableMsg(Cnn1)
Set rec2 = getTableMsg(Cnn2)
Do While rec1.EOF = False
  If tablename <> rec1.Fields("表名") Or flag = False Then
    flag = False
    tablename = rec1.Fields("表名")
    fieldname = rec1.Fields("字段名")
    rec2.Filter = "表名='" & tablename & "'"
    If rec2.RecordCount = 0 Then
      Msg = Msg & vbCrLf & "目标2欠:" & tablename
      flag = True
    Else
      rec2.Filter = "表名='" & tablename & "' and 字段名='" & fieldname & "'"
      If rec2.RecordCount = 0 Then
         Msg = Msg & vbCrLf & "目标2欠:" & tablename & "->" & fieldname
      Else
         For i = 0 To rec1.Fields.Count - 1
              If rec1(i) <> rec2(i) Then Msg = Msg & vbCrLf & "不同:" & tablename & "->" & fieldname & ">>" & rec1(i).Name
         Next<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值