且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

显示同一个表中缺少记录的结果。

更新时间:2023-01-22 11:07:09

试试这个:

Try this:
;WITH CTE AS
(
  SELECT 1 AS FirstNo, MAX(MyNumber) AS LastNo
  FROM A
  UNION ALL
  SELECT FirstNo +1 As FirstNo, LastNo
  FROM CTE 
  WHERE FirstNo<LastNo
)
  SELECT FirstNo AS MyNumber
  FROM CTE
  EXCEPT 
  SELECT MyNumber
  FROM A
  OPTION (MAXRECURSION 0)





SqlFiddle



有关详细信息,请参阅:

WITH common_table_expression(Transact-SQL ) [ ^ ]

EXCEPT和INTERSECT(Transact-SQL) [ ^ ]



Linq解决方案:



SqlFiddle

For further information, please see:
WITH common_table_expression (Transact-SQL)[^]
EXCEPT and INTERSECT (Transact-SQL)[^]

Linq solution:

DataTable dt = new DataTable();
DataColumn dc = new DataColumn("ID", Type.GetType("System.Int32"));
dt.Columns.Add(dc);
dt.Rows.Add(1);
dt.Rows.Add(2);
dt.Rows.Add(3);
dt.Rows.Add(5);
dt.Rows.Add(6);
dt.Rows.Add(8);
dt.Rows.Add(10);

int maxid = dt.AsEnumerable().Max(x=>x.Field<int>("ID"));

var qry = Enumerable.Range(1, maxid).Except(dt.AsEnumerable().Select(x=>x.Field<int>("ID")));
foreach(var n in qry)
{
    Console.WriteLine("{0}", n);
}