使用 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)
试试这个。使用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();
}