更新时间: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);
}