sql - 在插入之前检查 SQL Server 表中是否已存在记录

标签 sql excel vba sql-insert

我有一个包含 5 列和 3 行数据的 Excel 表。每次数据更改时,它都会上传到数据库。下面是我将数据从 Excel 表发送到 SQL Server 中现有表的代码。挑战在于,数据库接受唯一的 ID 值。如果您在 Excel 表中的 ID 已存在于数据库中时如何更改代码,我将不胜感激?代码以以下消息终止:

Duplicates are not allowed!


Sub IMPORT()

    Dim con As ADODB.Connection
    Dim cmd As ADODB.Command

    Set con = New ADODB.Connection
    Set cmd = New ADODB.Command

    Dim r As Range

    con.ConnectionString = sqlconstr
    con.Open "Provider=sqloledb;Data Source=DS;Initial Catalog=AUTO;Integrated Security=SSPI"

    cmd.ActiveConnection = con

    For Each r In Range("a2", Range("a2").End(xlDown))

        If r.Offset(0, 4).Value <> "" Then

            cmd.CommandText = cmd.CommandText & _
            GetInsertText( _
                r.Offset(0, 0).Value, _
                r.Offset(0, 1).Value, _
                r.Offset(0, 2).Value, _
                r.Offset(0, 3).Value, _
                r.Offset(0, 4).Value _
            )

        End If

    Next r

    Debug.Print cmd.CommandText

    cmd.Execute

    con.Close
    Set con = Nothing

    msgbox "Import successful"

End Sub
Function GetInsertText(ID As String, Date1 As Date, Date2 As Date, Reference As String, Price As Double)

    sql = _
        "insert into dbo.TP (" & _
        "ID, Date1, Date2, Reference, Price)" & _
        "values (" & _
        "'" & ID & "'," & _
        "'" & Format(Date1, "yyyy-mm-dd") & "'," & _
        "'" & Format(Date2, "yyyy-mm-dd") & "'," & _
        "'" & Reference & "'," & _
        Replace(Format(Price, "#0.00"), ",", ".") & ");"

    GetInsertText = sql

End Function 

最佳答案

我不确定语法是否正确,但你可以尝试这样的事情:

Function ExistsAlready(ID As String, conn as Object) As Boolean

  Dim cmd As ADODB.Command

  Set cmd = New ADODB.Command

  cmd.CommandText = "select count(*) from dbo.TP where ID = '" & ID & "'"
  cmd.ActiveConnection = con
  Set rs = cmd.Execute

  ExistsAlready= rs.Fields(0).Value

End Function 
那么您可以使用它来检查您的表中是否已经存在 ID。

关于sql - 在插入之前检查 SQL Server 表中是否已存在记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67776623/

相关文章:

mysql - sql错误代码: 1241.操作数应包含1列

sql - 在BigQuery(SQL)中填写缺少的日期而不创建新的日历

sql - 如何从数据库中获取保存的文本布局

c# - 如何从 Excel 中获取范围(打印区域)?

ios - 如何在 objective-c 中将数组数据写入excel文件(CSV)

vba - 循环与 "Select Cases"组合

sql - 在 SQL 中,如何聚合表内的字段

mysql - 从 Excel 工作表连接到 Access 数据库 - 语法错误

excel - Vba用按钮上下移动行,第二行除外

api - 如何使用 VBA 下载文件(无需 Internet Explorer)