IDENTITY(自动编号)字段在分页中的使用
我们先了解一下临时表的相关知识,临时表跟正常数据表一样,除了名字前通常加上#或者##之外,可以同正常表一样使用。#表示一个局部临时表,##表示是一个全局临时表。局部临时表是属于创建它的数据库连接的,而全局临时表在所有数据库连接中都是可连接的。
IDENTITY(自动编号)字段在分页中的使用,自动获取数据的编号,起着关键的作用。
以北风数据库为例,代码示例如下:
MyROW MyProductID MyProductName
----------- ----------- ----------------------------------------
2 3 Aniseed Syrup
5 18 Carnarvon Tigers
3 40 Boston Crab Meat
4 60 Camembert Pierrot
从运行结果的数据来看,这个方法有些缺陷,不能保证按相同的顺序填充临时表,并且在两次连续的查询中,也无法保证每个商品获得相同的行号。
IDENTITY(自动编号)字段在分页中的使用,自动获取数据的编号,起着关键的作用。
以北风数据库为例,代码示例如下:
CREATE PROCEDURE [dbo].[MyTable]
AS
CREATE TABLE #MyProducts
(MyROW int not null Identity(1,1),
MyProductID int,
MyProductName varchar(40))
BEGIN
INSERT INTO #MyProducts(MyProductID,MyProductName)
SELECT ProductID,ProductName FROM Products
SELECT MyROW,MyProductID,MyProductName FROM #MyProducts WHERE MyROW >=2 AND MyROW<=5
END
第一次运行的结果如下:AS
CREATE TABLE #MyProducts
(MyROW int not null Identity(1,1),
MyProductID int,
MyProductName varchar(40))
BEGIN
INSERT INTO #MyProducts(MyProductID,MyProductName)
SELECT ProductID,ProductName FROM Products
SELECT MyROW,MyProductID,MyProductName FROM #MyProducts WHERE MyROW >=2 AND MyROW<=5
END
MyROW MyProductID MyProductName
----------- ----------- ----------------------------------------
2 3 Aniseed Syrup
5 18 Carnarvon Tigers
3 40 Boston Crab Meat
4 60 Camembert Pierrot
从运行结果的数据来看,这个方法有些缺陷,不能保证按相同的顺序填充临时表,并且在两次连续的查询中,也无法保证每个商品获得相同的行号。
金戈铁马