有怪事请教?? 是有并发性吧!把重复的删掉!给recordid加主键就绝对不会发生了!!!!!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 有一个可能,比如input表生成一个recordid为10的记录,这个时候程序把该记录存放到日表中。但存放完毕以后该记录除recordid字段外其他字段被修改,包括日期,但是程序在导入数据的时候是按日期区分的,所以它认为是新记录,然后又给导过去了。这个时候,就会在日表出现recordid重复的问题了。 DJMPH(冷开水)分析的有道理你对input表update 日期的时候,用触发器直接修改相应的日表记录日表的recordid加主键后,重复记录就不会被插入了 input表导完数据后,对INPUT表将如何处理:1。数据删除。用DELETE;此方法不会重复;2。数据删除。用TRUNCATE;这种删除方法再下次导数时会产生重复;3。不做处理。下次导数时也会重复。 现在大家的方法有两个: happydreamer(小黑) 的:采用触发器update,同时日表recordid加主键或唯一索引。同时建议在导数据的时候使用where recordid not in (select recordid from 日表)等判断。 tj_dns(愉快的登山者) 的:要不你就干脆导入以后就delete导入过的数据,以后修改就到日表里改。这样就不会重复了。 感谢各位的热心相助!!问题并没有解决,这可能跟我描述得过于简单有关.现详述之:有个程序A负责将文件导入数据库的input中,同时有另外一个程序B实时地讲input表中的记录按日期字段分别将记录导入相应的日表中,并且删除input中已经分到日表中的记录.日表中的recordid字段是由input表中的recordid中的数据传进来的,主要用于界定删除input表中已分到日表的记录的范围.因此不能将日表的recordid加任何约束.现在问题是,在处理一段时间后,发现日表与日表之间存在recordid相同,但其他字段数据不相同的记录.请问为何???先谢了!!! 我看啦,这个问题可能出在很多地方:首先,B程序出现问题的可能比较大。因为他是负责数据的‘分发’的,要是他在分发数据的时候把recordid分配错误就会造成recordid重复。还有就是日表之间的数据应该是独立的,所以应该保证日表的数据不能被其他程序所修改到。特别是recordid字段。最后应该保证的是不要对input表的recordid字段的当前号做任何处理。否则recordid的唯一性就不能得到保证。因为你导出后的数据是被删除了的。 根据本人的猜测。应该是事务和判断的问题。假设两个任务分别命名为A,B。A负责INPUT,B负责日表。则可以猜测的过程大概如下:当B读取INPUT表的数据的时候,并插入到日表。但是这个时候可能没有对INPUT的表进行锁定。然后这个时候B又读取INPUT表的其它字段。这里可能存在INPUT表又插入一条数据的可能性。而B这个时候获取其他的数据的过程可能有问题,例如总是取最大的ID的有关数据。B的插入需要的资料(可能已经错误了),然后又要删除A中的记录。但是这个时候可能删除的就是另外一个记录。所以错误发生了。具体不知道程序如何,但是可以使用适当的LOCK,和对具体ID的追踪来解决问题。以上都是一个假设. 如果程序是你们自己做就有办法:1)input中不要删除记录,而是做处理标记,以recordid为主键避免程序A输入重复记录。2)B程序的操作作为完整的一个事务进行(最好用存储过程做) 到底是什么意外很难通过这样的叙述了解清楚。如果假设了“日表中的数据不能加约束”同时又假设他是一致的(这是变本加厉地走向混乱),当意外出现时,某些关联语句往往预期的不同,关联input表和日表就不会得到与input表同样多的记录,而是多倍的数据。 换句话说,当“日表”比input复杂时,不是“不能加约束”而是应该“非常精巧仔细加上更加细致的约束”。 纠正:日表的recordid加上唯一约束.不过问题还是出现!!!! 我在想,会不会是input表中recordid字段的问题.因为有可能某一次的数据导入到input表时,使用了原来被删除了的标识号.我的根据是来自于SQLServer帮助里的一段话----"如果表的标识符列经常执行删除操作,标识值间可能会产生断缺,删除的标识值不能再使用。要避免出现这类断缺,请勿使用 IDENTITY 属性。而应在插入行时,以标识符列中现有的数值为基础创建确定新标识值的触发器"大家认为呢????? recordid字段本身应该不会有问题,identity本身是不会重复的,只会往前增长。如果表做了删除操作的话,identity字段会出现不连续的。可以try如果input往日表中做了插入后,不删除input表的纪录,看是否会出现重复,如果不重复的话,就不是identity的问题,而是你插入到日表的问题。会不会同一个recordid插入到2个日表中呢?由于修改的出现? 如何启动sql server2005中输入提示的功能? 求一个系统监控软件 求一Sql语句 请问这样写出了什么问题啊,,有关于数据库查询方面的,,这道题应该怎么样做才可以啊,,请各位指教 sql server 2008 还原出错 读取失败: 38(已到文件结尾。) 求平均分的语句,为什么运行时出错啊 请教一个关于数据转换的问题! 一个SQL语句的问题,不知道用简单的方法来做是否很难? 关于时间的比较 这样优化是成功还是失败??? SQL server2000中截去小数位保留整数位的函数是那个啊????? 请教,这个SQL的写法?
这个时候,就会在日表出现recordid重复的问题了。
你对input表update 日期的时候,用触发器直接修改相应的日表记录
日表的recordid加主键后,重复记录就不会被插入了
1。数据删除。用DELETE;此方法不会重复;
2。数据删除。用TRUNCATE;这种删除方法再下次导数时会产生重复;
3。不做处理。下次导数时也会重复。
happydreamer(小黑) 的:采用触发器update,同时日表recordid加主键或唯一索引。同时建议在导数据的时候使用where recordid not in (select recordid from 日表)等判断。
tj_dns(愉快的登山者) 的:要不你就干脆导入以后就delete导入过的数据,以后修改就到日表里改。这样就不会重复了。
问题并没有解决,这可能跟我描述得过于简单有关.
现详述之:
有个程序A负责将文件导入数据库的input中,同时有另外一个程序B实时地讲input表中的记录按日期字段分别将记录导入相应的日表中,并且删除input中已经分到日表中的记录.日表中的recordid字段是由input表中的recordid中的数据传进来的,主要用于界定删除input表中已分到日表的记录的范围.因此不能将日表的recordid加任何约束.现在问题是,在处理一段时间后,
发现日表与日表之间存在recordid相同,但其他字段数据不相同的记录.请问为何???先谢了!!!
首先,B程序出现问题的可能比较大。因为他是负责数据的‘分发’的,要是他在分发数据的时候把recordid分配错误就会造成recordid重复。
还有就是日表之间的数据应该是独立的,所以应该保证日表的数据不能被其他程序所修改到。特别是recordid字段。
最后应该保证的是不要对input表的recordid字段的当前号做任何处理。否则recordid的唯一性就不能得到保证。因为你导出后的数据是被删除了的。
则可以猜测的过程大概如下:当B读取INPUT表的数据的时候,并插入到日表。但是这个时候可能没有对INPUT的表进行锁定。然后这个时候B又读取INPUT表的其它字段。这里可能存在INPUT表又插入一条数据的可能性。而B这个时候获取其他的数据的过程可能有问题,例如总是取最大的ID的有关数据。B的插入需要的资料(可能已经错误了),然后又要删除A中的记录。但是这个时候可能删除的就是另外一个记录。所以错误发生了。具体不知道程序如何,但是可以使用适当的LOCK,和对具体ID的追踪来解决问题。以上都是一个假设.
日表的recordid加上唯一约束.不过问题还是出现!!!!
identity本身是不会重复的,只会往前增长。
如果表做了删除操作的话,identity字段会出现不连续的。可以try如果input往日表中做了插入后,不删除input表的纪录,
看是否会出现重复,如果不重复的话,就不是identity的问题,
而是你插入到日表的问题。
会不会同一个recordid插入到2个日表中呢?
由于修改的出现?