使用 C# 检查 SQL 中是否存在记录

本文关键字:是否 存在 记录 SQL 检查 使用 | 更新日期: 2023-09-27 18:31:49

在我的SQL Server数据库中,我有增量记录,有时ID增量有一些间隙。

ID      Data     Data
9857370  Data   (null)
9857371 (null)  (null)
9857375 (null)  (null)  
9857376 (null)  (null)

我们可以看到 ID 增量的差距。

编辑:

我将 C# 与 SQL 用于 ASP.net 项目。对于 SQL 请求,我选择数据库中的最后一个 ID,在 C# 中使用 OleDbDataReader 检查每条记录,如果他没有像我的例子那样 (null) (null),然后我递减我的 ID,直到在列中有一个数据。

但是当他在 2 个记录之间跳跃时,我无法检查我的记录。

 ID      Data     Data
9857371  (null)  (null)
9857375  (null)  (null) 

使用 C# 检查 SQL 中是否存在记录

试试这个。使用Recursive CTE在表中生成介于最大 ID 和最小 ID 之间的 ID。然后使用 LEFT join CTE 与表来获取缺少的行。

DECLARE @MaxID INT = (SELECT MAX(ID) FROM Tablename)
DECLARE @MinID INT = (SELECT Min(ID) FROM Tablename)
;WITH CTE
AS (
    SELECT @MinID fullid 
    UNION ALL
    SELECT fullid + 1 FROM CTE WHERE fullid < @MaxID
    )
SELECT fullid as MissingId FROM CTE
LEFT JOIN dbo.Tablename t on t.ID = CTE.fullid 
WHERE t.ID isNULL
GO

我通常准备了一个数字表,它只包括一列和从 1 到 n 的所有数字(n 可以在必要时轻松加倍)。然后使用简单的查询查找第一个未使用的数字。喜欢:

SELECT TOP 1 NUMBER FROM NUMBERS
WHERE NOT EXISTS (SELECT * FROM TABLE1 WHERE ID = N)
ORDER BY NUMBER

简单且非常快速,假设列编号和 ID 已编制索引。

编辑:如何创建和填充数字表。

CREATE TABLE NUMBERS(NUMBER INT)
GO
INSERT INTO NUMBERS VALUES(1)

并在需要将数字数量加倍(1、2、4、8 等)时执行以下命令

INSERT INTO NUMBERS
SELECT (SELECT MAX(NUMBER) FROM NUMBERS) + NUMBER FROM NUMBERS

好的,我已经解决了我的问题!

我的问题是访问数据库中的数据,但记录没有数据(例如在 9857371 和 9857375 之间)或记录空(9857376(空)(空))。

ID      Data     Data
9857370  Data   (null)
9857371 (null)  (null)
9857375 (null)  (null)  
9857376 (null)  (null)

这是我使用循环访问数据的代码,希望它能帮助某人

public void main(string url)
 {
     int var = 0;
     string conn = url;

     OleDbConnection connexion = new OleDbConnection(conn);
     connexion.Open();
     OleDbCommand cmd = new OleDbCommand("SELECT ID, DATA1, DATA2 from Database WHERE ID = ( SELECT MAX (ID) -" + var + " FROM Database);", connexion);
     OleDbDataReader reader = cmd.ExecuteReader();
     reader.Read();

     if (connexion.State == ConnectionState.Open)
     {

         if (!reader.HasRows || (String.IsNullOrEmpty(reader[1].ToString())) && (String.IsNullOrEmpty(reader[2].ToString())))
         {
             reader.Close();
             OleDbDataReader reader2 = cmd.ExecuteReader();
             reader2.Read();
         Found:
             while (!reader2.HasRows || ((String.IsNullOrEmpty(reader2[1].ToString())) && (String.IsNullOrEmpty(reader2[2].ToString()))))
             {

                 var++;
                 reader2 = fonction(var, url);
                 reader2.Read();
                 if (!reader2.HasRows)
                 {
                     goto Found;
                 }
                 else if (((!String.IsNullOrEmpty(reader2[1].ToString())) || (!String.IsNullOrEmpty(reader2[2].ToString()))))
                 {
                     data = reader2[1].ToString() + " " + reader2[2].ToString();
                 }
                 else
                 {
                     data = "No Data in Database";
                 }
             }
             reader2.Close();
         }
         else
         {
             data = reader[1].ToString() + " " + reader[2].ToString();
         }
     }
     else
     {
         data = "Connexion KO";
     }

     reader.Close();
     connexion.Close();
 }