我一直在尝试使用this问题中的以下SQL语句将数据从一个Access表插入到链接的SQL Server表中,并根据我的目的进行修改 - 但我不断将'溢出'作为错误消息:
INSERT INTO dbo_tblGageActivity(strGageID, strCustJobNum, datDateEntered, datTimeEntered)
SELECT [Gage ID] as GageID, [Customer Job#] as JobNum, [Date] as DateEntered,
[Time Entered] as TimeEntered FROM TblInstTrak;
我尝试了很多方法,都导致了“溢出”错误。我一定错过了什么,但对于我的生活,我不知道是什么。对于一个Insert子查询来说,> 100,000条记录是否过多?
- 2011年1月25日编辑@ 1540小时 -
字段的数据类型和大小如下:
TblInstTrak Type:Size Required dbo_tblGageActivity Type:Size Required
----------------------------------------------------------------------------------------------------
Gage ID Text:50 True strGageID Text:50 True
Customer Job# Text:50 False strCustJobNum Text:50 True
Date Date/Time:8 False datDateEntered Date/Time:8 True
Time Entered Date/Time:8 False datTimeEntered Date/Time:8 True
- 编辑于2011年1月26日@ 1355时 -
好吧 - 我已经在这上面敲了几天(在我来之前和之前的那一天),我能想到的唯一不同之处就是日期输入字段本地应用程序端格式化为'm / d / yyyy',本地应用程序端的Time Entered字段格式化为'Long Time' - SQL Server表中的这些字段都没有设置任何格式。
出于性能原因,我开始怀疑是否有更好的方法来提取所有当前数据以将数据放入表中 - 然后只将更新从本地应用程序提取到镜像SQL Server副本中。没有数据输入到SQL Server端副本,它仅用于我的测试应用程序的性能 - 唯一更改的数据是在本地应用程序端。这种方法比擦除SQL Server数据库表更容易,每次我想更新它时重新填充它吗?
- 2011年1月28日编辑@ 1236小时 -
在罗马帝国时代找到一些日期后(感谢David Fenton指示我这一点)我修改了我的导入SQL语句到以下内容:
INSERT INTO dbo_tblGageActivity(strGageID, strCustJobNum, datDateEntered, datTimeEntered)
SELECT [Gage ID] as GageID, [Customer Job#] as JobNum, [Date] as DateEntered,
[Time Entered] as TimeEntered FROM TblInstTrak WHERE [Date] >=1/1/1900;
我得到了几个非常好的答案,而且我只能选择一个答案(精神痛苦)所以请不要生气 - 这真的真的帮助我学习。
答案 0 :(得分:3)
发生溢出是因为所选行中的一个或多个值不适合您要插入的表。换句话说,在TblInstTrak
中,您的值不符合dbo_tblGageActivity
中各自的列。比较两个表的定义,并确保目标表列足够宽,以容纳源表中的数据。
答案 1 :(得分:1)
如果您使用OLEDB提供程序链接它,则存在最大插入提交大小的属性 在这里查看更多详情: http://www.bidn.com/blogs/ShawnHarrison/ssis/803/maximum-insert-commit-size
答案 2 :(得分:1)
Access中的日期值是否超出SQL Server日期/时间字段的范围?这是我在将旧的Access数据库升级到SQL Server时遇到的一个非常非常常见的问题 - 大量手指错误,其中的日期实际上是在罗马帝国晚期!