日期:2014-05-17  浏览次数:20491 次

sqlserver 没有自增列 如何处理实现增量读取
sqlserver 表没有自增列  如何处理实现增量读取 ,想实现每次从已有的这个库中读取一段,下次只读取比上次大的数据,(比如 某个字段 > 上次的值 ),想用时间但是有重复的时间不好弄了。。。

sql如下

USE [test]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[test](
[goodsNo] [char](8) NOT NULL,
[goodsName] [char](8) NULL,
[Type] [char](8) NULL,
[Num] [char] NULL,
[InputMan] [char](8) NULL,
[Date] [datetime] NULL,
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF


有这个ON [PRIMARY]是不是说明 主文件上有自增的字段?大牛们帮忙看看....

------解决方案--------------------
1、ON [PRIMARY]只是说明这个表创建在primary文件组上,也就是默认的文件组。不用管太多。
2、不是只有自增ID才能找到增量值,有时候自增反而是一种危险。
3、最重要你要找到表的主键。而业务上怎么判断一个主键,那恐怕只能设计的人和熟悉业务的人才知道了。
4、我现在假设[goodsNo] ,[goodsName] 这两个联合起来可以唯一标识一条数据,也就是联合主键,然后给你一个例子, 你那个:
SELECT  *
FROM    test a
WHERE   NOT EXISTS ( SELECT 1
                     FROM   test b
                     WHERE  a.[goodsNo] = b.[goodsNo]
                            AND a.[goodsName] = b.[goodsName] )

5、没有自增你可以自己加个自增上去啊,如果是05以上的版本:
SELECT  row_number() OVER ( ORDER BY GETDATE() ) id ,
        *
FROM    test
 
这样就有了一个ID列了。
------解决方案--------------------
类似于使用ROW_NUMber()分页功能。 
------解决方案--------------------
引用:
引用:
1、ON [PRIMARY]只是说明这个表创建在primary文件组上,也就是默认的文件组。不用管太多。
2、不是只有自增ID才能找到增量值,有时候自增反而是一种危险。
3、最重要你要找到表的主键。而业务上怎么判断一个主键,那恐怕只能设计的人和熟悉业务的人才知道了。
4、我现在假设[goodsNo] ,[goodsName] 这两个联合起来可……
那如果可以改表的话,先创建一个一模一样的实体表,然后加上一列自增列,然后把数据从源表导过去。再删除源表,最后重命名新表为源表名字。
------解决方案--------------------
用goodsNo作匹配,時間會有重複?