【问题标题】:Sql Server CE can I delete TOP or only 1 record from table that matches my querySql Server CE 我可以从与我的查询匹配的表中删除 TOP 或仅 1 条记录
【发布时间】:2012-01-16 08:03:23
【问题描述】:

select Top(1)* from TableName Where columnName=value

只选择第一行就好了。但是,如果我将选择更改为删除,我会收到错误消息,并且无法弄清楚如何编写查询以仅删除与数据库中的查询匹配的 1 条记录。

我想知道是否有比我更聪明的人知道这是否可以在 SQL CE 中完成或如何完成。

【问题讨论】:

    标签: sql sql-server-ce


    【解决方案1】:

    下面的代码只会删除第一行

    Dim mySqlCommondDelete As String = "DELETE BOOK_ID, MemberID FROM (SELECT TOP 1 * FROM ISSUE_BOOK) where BOOK_ID = Val(" & deleteBook & ") and MemberID = Val(" & msk & ")"
    

    【讨论】:

      【解决方案2】:

      不应该是这样吗:

      DELETE FROM TableName WHERE columnName=value ORDER BY columnName LIMIT 1;
      

      恕我直言,该表在逻辑上本身没有顺序。它在身体上有它,但你不能依赖它。因此,您必须设置要删除第一行的顺序。

      【讨论】:

        【解决方案3】:

        你可以使用CTE比如

        ;with myTopRow(rowID)
        (
            select Top 1 rowID from TableName Where columnName=value
        )
        delete from TableName inner join myTopRow on TableName.rowID = myTopRow.rowID
        

        【讨论】:

          【解决方案4】:

          你尝试过这样的事情吗?

          DELETE TableName where IdColumn In ( select Top(1) IdColumn from TableName Where columnName=valuev)
          

          【讨论】:

          • +1 这也是另一个不错的选择。如果您(像我一样)不熟悉 CE 中存在的确切限制,我会尝试尽可能多的选项。
          • 当前该表没有键。我可以重新设计表和一些应用程序逻辑,如果 SQL Server CE 不支持我想做的事情,我很可能不得不这样做
          • 然后在此处查看接受的答案:stackoverflow.com/questions/439750/…
          • 对不起,忽略这个,我忘记了前1个。那你如何确定你想删除的内容?还是只是一个随机的前 1 名而你不在乎?
          • 唯一标识符的存在(无论是复合键还是其他)是一个非常好的实践。对那个有自己的建议:)
          【解决方案5】:

          我不知道具体因为我在家,但 SQL CE 被故意限制它可以做什么。原因之一是它“总是”在本地运行到引用它的进程。

          这意味着期望其他进程处理大部分可能以其他方式封装在 SQL Server 中的逻辑。这通常会导致在 SQL CE 实例上触发多个查询,而您可能更习惯于触发一个。

          在这种情况下,您可以通过两个查询来完成...
          1) 用于识别您要删除的记录的查询
          2)在另一个查询中使用该标识符进行实际删除


          您也可以尝试使用 SET ROWCOUNT 1 将 DELETE 限制为 1 行。但同样,我不知道这是否适用于 CE。

          【讨论】:

          • 在 CE 中使用 set rowcount 不走运
          • SET ROWCOUNT 1 DELETE FROM [Table] where col1 = col2 SET ROWCOUNT 0 ... 适用于 Sql Server。谢谢。
          猜你喜欢
          • 1970-01-01
          • 2017-10-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多