Access 不支持 ROW_NUMBER() 函数(像 SQL Server 那样的窗口函数),但可以通过一些技巧来模拟序号的生成。可以使用子查询和 JOIN 来手动生成序号。
例如,假设你有一个表 MyTable,你想根据 Name 字段的排序生成一个序号。可以使用下面的 SQL 查询:
sql SELECT (SELECT Count(*) FROM MyTable AS T2 WHERE T2.Name <= T1.Name) AS SequenceNumber, T1.Name FROM MyTable AS T1 ORDER BY T1.Name;
解释:
这个查询通过子查询计算 MyTable 中每个 Name 字段之前的记录数量,从而生成一个递增的序号。 Count(*) 计算当前记录 T1.Name 排名之前(包括自身)的记录数,这样生成的 SequenceNumber 就是递增的序号。 ORDER BY T1.Name 确保记录按 Name 字段的字母顺序排列。
Sub InsertData() Dim strSQL As String strSQL = "INSERT INTO Customers (CustomerName, ContactName) VALUES ('John Doe', 'Jane Doe')" CurrentDb.Execute strSQL End Sub
这段代码会向 Customers 表中插入一行数据。 示例 2:运行一个更新查询
Sub UpdateData() Dim strSQL As String strSQL = "UPDATE Customers SET ContactName = 'John Smith' WHERE CustomerID = 1" CurrentDb.Execute strSQL End Sub
' 创建新的工作簿 Set xlSheet = xlApp.Workbooks.Add.Sheets(1)
' 在 Excel 第一行输出字段名 For i = 0 To rs.Fields.Count - 1 xlSheet.Cells(1, i + 1).Value = rs.Fields(i).Name Next i
' 输出数据到 Excel rowNum = 2 ' 从第二行开始 Do While Not rs.EOF For i = 0 To rs.Fields.Count - 1 xlSheet.Cells(rowNum, i + 1).Value = rs.Fields(i).Value Next i rowNum = rowNum + 1 rs.MoveNext Loop
' 关闭 Recordset rs.Close Set rs = Nothing Set db = Nothing End Sub
SET FMTONLY OFF; 这条命令关闭 FMTONLY 选项。当 FMTONLY 设置为 ON 时,SQL Server 只会返回查询结果的元数据(例如列名和数据类型),而不实际执行查询,也就是说不会返回数据行。这个选项通常用来查看查询结果的结构,但不执行查询。
设置为 OFF 后,SQL Server 将执行查询并返回实际的数据。
SET NO_BROWSETABLE ON; 这条命令用于阻止 SQL Server 将临时表显示在 SQL Server Management Studio(SSMS)的浏览界面中。也就是说,当你设置 NO_BROWSETABLE 为 ON 时,临时表将不会出现在 SSMS 的 "对象资源管理器" 中。
这个设置一般用来避免在会话期间,SQL Server 自动显示系统内部对象或临时表。
SET NO_BROWSETABLE OFF; 这条命令将前面的设置恢复为默认状态,允许在 SSMS 中浏览临时表。也就是说,当你执行这条命令后,当前会话中创建的临时表将再次出现在 "对象资源管理器" 中。
alter database AIS20230719161500 set multi_user with rollback immediate
/*
--------------------
DBCC CHECKDB(AIS20230719161500)
消息 8905,级别 16,状态 1,第 2 行 数据库 ID 11 中的区 (1:60752) 标记为已在 GAM 中分配,但没有任何 SGAM 或 IAM 分配过该区。
表错误: 对象 ID 352108395,索引 ID 1,分区 ID 304550752485376,分配单元 ID 304550752485376 (类型为 In-row data)。索引节点页 (1:44705),槽 48 指向子页 (1:39015) 和上一子页 (1:39014),但未遇到这些页。
CHECKDB 在表 'ICSaleEntry' (对象 ID 352108395)中发现 0 个分配错误和 1 个一致性错误。
表错误: 对象 ID 1467920351,索引 ID 7,分区 ID 2066526465097728,分配单元 ID 2066526465097728 (类型为 In-row data)。B 树页 (1:44886) 有两个父节点 (1:60772),槽 0 和 (1:60762),槽 0。 表错误: 对象 ID 1467920351,索引 ID 7,分区 ID 2066526465097728,分配单元 ID 2066526465097728 (类型为 In-row data)。页 (1:60762) 缺少父级(未知)和上一(页 (0:0))节点对它的引用。可能是因为系统目录中的根条目有问题。 表错误: 对象 ID 1467920351,索引 ID 7,分区 ID 2066526465097728,分配单元 ID 2066526465097728 (类型为 In-row data)。页 (1:60763) 上的上一页链接 (1:60773) 与父代 (1:60762) 槽 1 所预期的此页的上一页 (1:44886) 不匹配。 表错误: 对象 ID 1467920351,索引 ID 7,分区 ID 2066526465097728,分配单元 ID 2066526465097728 (类型为 In-row data)。页 (1:60773) 上的高键值(级别 0)不小于下一页 (1:60763) 的父代 (0:1) 槽 0 中的低键值。 表错误: 对象 ID 1467920351,索引 ID 7,分区 ID 2066526465097728,分配单元 ID 2066526465097728 (类型为 In-row data)。页 (1:60773) 上的高键值(级别 0)不小于下一页 (1:60763) 的父代 (0:1) 槽 0 中的低键值。
表错误: 表 'ICStockBillEntry' (ID 1467920351)。数据行在索引 'idx_ICStockBillEntry_FSEOutInterID' (ID 14)中没有匹配的索引行。与以下数据行匹配的索引行的键可能丢失或无效: 表错误: 表 'ICStockBillEntry' (ID 1467920351)。数据行在索引 'idx_ICStockBillEntry_FDetailID' (ID 19)中没有匹配的索引行。与以下数据行匹配的索引行的键可能丢失或无效:
CHECKDB 在表 'ICStockBillEntry' (对象 ID 1467920351)中发现 0 个分配错误和 7 个一致性错误。 CHECKDB 在表 'ICClassProfileEntry' (对象 ID 1910297865)中发现 0 个分配错误和 1 个一致性错误。
表错误: 对象 ID 1911834023,索引 ID 1,分区 ID 406768931241984,分配单元 ID 406768931241984 (类型为 In-row data)。在扫描过程中未发现页 (1:60772),但该页的父级 (1:58980) 和上一页 (1:59327) 都引用了它。请检查以前的错误消息。
CHECKDB 在表 't_RP_Plan_Ar' (对象 ID 1911834023)中发现 0 个分配错误和 1 个一致性错误。
表错误: 将重新生成对象 ID 352108395,索引 ID 1。 该错误已修复。 表错误: 对象 ID 352108395,索引 ID 1,分区 ID 304550752485376,分配单元 ID 304550752485376 (类型为 In-row data)。索引节点页 (1:44705),槽 48 指向子页 (1:39015) 和上一子页 (1:39014),但未遇到这些页。 该错误已修复。 表错误: 将重新生成对象 ID 352108395,索引 ID 2。 该错误已修复。 表错误: 将重新生成对象 ID 352108395,索引 ID 3。 该错误已修复。 表错误: 将重新生成对象 ID 352108395,索引 ID 4。 该错误已修复。 表错误: 将重新生成对象 ID 352108395,索引 ID 5。 该错误已修复。 表错误: 将重新生成对象 ID 352108395,索引 ID 6。 该错误已修复。 表错误: 将重新生成对象 ID 352108395,索引 ID 7。 该错误已修复。 表错误: 将重新生成对象 ID 352108395,索引 ID 8。 该错误已修复。 表错误: 将重新生成对象 ID 352108395,索引 ID 9。 该错误已修复。 表错误: 将重新生成对象 ID 352108395,索引 ID 10。 该错误已修复。 表错误: 将重新生成对象 ID 352108395,索引 ID 11。 该错误已修复。 表错误: 将重新生成对象 ID 352108395,索引 ID 12。 该错误已修复。 表错误: 将重新生成对象 ID 352108395,索引 ID 13。 该错误已修复。
CHECKDB 在表 'ICSaleEntry' (对象 ID 352108395)中发现 0 个分配错误和 1 个一致性错误。 CHECKDB 在表 'ICSaleEntry' (对象 ID 352108395)中修复了 0 个分配错误和 1 个一致性错误。
表错误: 将重新生成对象 ID 1467920351,索引 ID 7。 该错误已修复。 表错误: 对象 ID 1467920351,索引 ID 7,分区 ID 2066526465097728,分配单元 ID 2066526465097728 (类型为 In-row data)。B 树页 (1:44886) 有两个父节点 (1:60772),槽 0 和 (1:60762),槽 0。 该错误已修复。 表错误: 对象 ID 1467920351,索引 ID 7,分区 ID 2066526465097728,分配单元 ID 2066526465097728 (类型为 In-row data)。页 (1:60762) 缺少父级(未知)和上一(页 (0:0))节点对它的引用。可能是因为系统目录中的根条目有问题。 该错误已修复。 表错误: 对象 ID 1467920351,索引 ID 7,分区 ID 2066526465097728,分配单元 ID 2066526465097728 (类型为 In-row data)。页 (1:60763) 上的上一页链接 (1:60773) 与父代 (1:60762) 槽 1 所预期的此页的上一页 (1:44886) 不匹配。 该错误已修复。 表错误: 对象 ID 1467920351,索引 ID 7,分区 ID 2066526465097728,分配单元 ID 2066526465097728 (类型为 In-row data)。页 (1:60773) 上的高键值(级别 0)不小于下一页 (1:60763) 的父代 (0:1) 槽 0 中的低键值。 该错误已修复。 表错误: 对象 ID 1467920351,索引 ID 7,分区 ID 2066526465097728,分配单元 ID 2066526465097728 (类型为 In-row data)。页 (1:60773) 上的高键值(级别 0)不小于下一页 (1:60763) 的父代 (0:1) 槽 0 中的低键值。 该错误已修复。
表错误: 表 'ICStockBillEntry' (ID 1467920351)。数据行在索引 'idx_ICStockBillEntry_FSEOutInterID' (ID 14)中没有匹配的索引行。与以下数据行匹配的索引行的键可能丢失或无效: 该错误已修复。 表错误: 表 'ICStockBillEntry' (ID 1467920351)。数据行在索引 'idx_ICStockBillEntry_FDetailID' (ID 19)中没有匹配的索引行。与以下数据行匹配的索引行的键可能丢失或无效: 该错误已修复。 CHECKDB 在表 'ICStockBillEntry' (对象 ID 1467920351)中发现 0 个分配错误和 7 个一致性错误。 CHECKDB 在表 'ICStockBillEntry' (对象 ID 1467920351)中修复了 0 个分配错误和 7 个一致性错误。 该错误已修复。 表错误: 对象 ID 1910297865,索引 ID 1,分区 ID 406668257591296,分配单元 ID 71901312342097920 (类型为 LOB data)。位于页 (1:60752),槽 0,文本 ID 94274650112 的行外数据节点未被引用。 该错误已修复。
CHECKDB 在表 'ICClassProfileEntry' (对象 ID 1910297865)中发现 0 个分配错误和 2 个一致性错误。 CHECKDB 在表 'ICClassProfileEntry' (对象 ID 1910297865)中修复了 0 个分配错误和 2 个一致性错误。
表错误: 将重新生成对象 ID 1911834023,索引 ID 1。 该错误已修复。 表错误: 对象 ID 1911834023,索引 ID 1,分区 ID 406768931241984,分配单元 ID 406768931241984 (类型为 In-row data)。在扫描过程中未发现页 (1:60772),但该页的父级 (1:58980) 和上一页 (1:59327) 都引用了它。请检查以前的错误消息。 该错误已修复。 表错误: 将重新生成对象 ID 1911834023,索引 ID 2。 该错误已修复。 表错误: 将重新生成对象 ID 1911834023,索引 ID 3。 该错误已修复。 表错误: 将重新生成对象 ID 1911834023,索引 ID 4。 该错误已修复。 表错误: 将重新生成对象 ID 1911834023,索引 ID 5。 该错误已修复。
CHECKDB 在表 't_RP_Plan_Ar' (对象 ID 1911834023)中发现 0 个分配错误和 1 个一致性错误。 CHECKDB 在表 't_RP_Plan_Ar' (对象 ID 1911834023)中修复了 0 个分配错误和 1 个一致性错误。