【问题标题】:Delete if record exists and Insert if record doesn't exist如果记录存在则删除,如果记录不存在则插入
【发布时间】:2016-07-25 16:29:34
【问题描述】:

在我的 for 循环中,我正在编写一个插入和删除查询,它执行以下操作:

如果未选中复选框,则检查记录是否存在,如果存在则删除。如果它不存在,则什么也不做。

如果选中复选框,则还要检查记录是否存在,如果存在则不执行任何操作,如果不存在则插入。

我需要检查我的查询,尤其是我的子查询是否会正确执行或返回错误,因为我正在编写它而不想立即更改我的数据库。

For Each oDataGridItem In valgrid2.Items
        chk = oDataGridItem.FindControl("CheckBox1")
        rn = oDataGridItem.FindControl("lblrptName")
        rid = oDataGridItem.FindControl("lblReportID")
        If chk.Checked = True Then
            rpti = CType(oDataGridItem.FindControl("lblReportID"), Label).Text

            'valsql2 = "INSERT INTO CompanyReportListTable(CompanyID, ReportID) Values (valCompanyId, rpti) WHERE NOT EXISTS(SELECT * FROM CompanyReportListTable WHERE ReportID <> rpti and companyid <> valCompanyId and " & chk.Checked & "= 1)"
            'if it exists then don’t do anything
            'valsql2 = valsq2 & ";IF ReportID = rpti and companyid = valCompanyId BEGIN WHERE CompanyID = CompanyID AND ReportID = ReportID END" 
            'To do nothing, i'd equal the parameter's value to the column name

            count += 1
            rptn = CType(oDataGridItem.FindControl("lblrptName"), Label).Text
            oExArgs.Add(rptn)
            Response.Write(rpti + " - " + rptn + "<br/>")
        Else
            'valsql2 = valsq2 & ";DELETE FROM CompanyReportListTable WHERE EXISTS(Select * FROM CompanyReportListTable WHERE ReportID = rpti and companyid = valCompanyId and" & chk.Checked & " = 0)"
            'if it doesn't exist then don’t do anything
            'valsql2 = valsq2 & ";IF ReportID <> rpti and companyid <> valCompanyId BEGIN WHERE CompanyID = CompanyID AND ReportID = ReportID END" 

        End If

【问题讨论】:

  • 你试过运行它们吗?发生什么了?你有错误吗?它会改变正确的数据吗?
  • 我从其中一个子查询中得到一个错误,但我只运行了一次,因为我不想在那一刻更改我的数据库,直到我编写了正确的语句。
  • 如果用户同时选中两个框会怎样?
  • 那么选中复选框的两条记录都必须不存在,以便我将数据插入列中。如果两者都存在,则什么也不做。
  • 为开发制作一个数据库副本是最安全的。您可以在 SQL Server Management Studio 中编写 SQL 语句,以便获得正确的语法。我可以看到您的代码存在太多问题,因为我需要列出它们及其可能的解决方案。

标签: sql-server vb.net


【解决方案1】:
valsql2 = "INSERT INTO CompanyReportListTable(CompanyID, ReportID) Values (valCompanyId, rpti) WHERE NOT EXISTS(SELECT * FROM CompanyReportListTable WHERE ReportID <> rpti and companyid <> valCompanyId and " & chk.Checked & "= 1)"

在此代码中" &amp; chk.Checked &amp; "= 1)"会给出错误。 True =1 在 sql 中不支持。

【讨论】:

  • 谢谢卡西克。 chk 位于前端,不在任何列或值内,因此不需要。
【解决方案2】:

如果您不希望代码执行任何操作,则不需要 CASE 语句,因为 CASE 可以与 SELECT 语句一起使用。由于查询在 If-Else 语句下,因此 valsql2 = 不管,而不是 valsql2 = valsql2 & ";"因为这是一个条件语句,无论条件如何,查询也是如此。查询相当好,只需去掉 chk.Checked = 0 和 chk.Checked = 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-04
    • 2012-03-28
    • 1970-01-01
    • 2011-11-19
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多