SQL2000的表里一列 数据类型是varchar(40)能存下DataLength 是 41 的字符么?

sdlwhgw 2013-09-23 05:38:53
最近碰到了这样一个问题。
我要把一张表的数据从 SQLServer2000 同期到 SQLServer2008 里。

2000 和 2008 的表的结构是一模一样的。
在2008的查询分析器里执行的是

INSERT INTO tabele2008
SELECT prodname ,列2 ,***
FROM [XXX.XXX.XXX.XXX].DB1.dbo.tabele2000

执行的时候直接报错
链接服务器 'XXX.XXX.XXX.XXX' 的 OLE DB 访问接口 'SQLNCLI10' 返回了对列 XXX.XXX.XXX.XXX].DB1.dbo.tabele2000.prodname'无效的数据。

而在2000 的查询分析器里执行
SELECT prodname ,列2 ,***
FROM DB1.dbo.tabele2000 却没有错误。

具体看了一下数据
发生问题的字段 prodname 这个字段定义是 varchar(40) 里面存的是商品的名字
把商品的名字拷贝出来 用 SELECT Datalength()看是 41 这样的数据也能存到数据库里么?

怎么解释 在2008查询分析器 执行出错的原因?


...全文
341 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
tcmakebest 2013-10-09
  • 打赏
  • 举报
回复
很怀疑楼主所言:2000 和 2008 的表的结构是一模一样的 建表语句导出大家来看,楼主是近视吧!
sdlwhgw 2013-10-09
  • 打赏
  • 举报
回复
引用 8 楼 HEROWANG 的回复:
2000 和 2008 的表的结构是一模一样的。 在2008的查询分析器里执行的是 INSERT INTO tabele2008 SELECT prodname ,列2 ,*** FROM [XXX.XXX.XXX.XXX].DB1.dbo.tabele2000 执行的时候直接报错 链接服务器 'XXX.XXX.XXX.XXX' 的 OLE DB 访问接口 'SQLNCLI10' 返回了对列 XXX.XXX.XXX.XXX].DB1.dbo.tabele2000.prodname'无效的数据。 而在2000 的查询分析器里执行 SELECT prodname ,列2 ,*** FROM DB1.dbo.tabele2000 却没有错误。 看下你的两个操作,一个是插入,一个是查询。当插入的时候,超过长度,自然插入不进去;
这个地方 单独执行 SELECT prodname ,列2 ,*** FROM [XXX.XXX.XXX.XXX].DB1.dbo.tabele2000 也是会报错的, 应该和插入没有关系。和 LinkServer 有关系。
Cloud_Hero 2013-09-24
  • 打赏
  • 举报
回复
应该是跟你的字符集有关。如果你用nvarchar()应该就没有问题了。
sdlwhgw 2013-09-24
  • 打赏
  • 举报
回复
引用 3 楼 chen870201 的回复:
估计和字符集也有关系吧
觉得有可能吧,但是没有更好的解释么?
xiaoxiangqing 2013-09-24
  • 打赏
  • 举报
回复
超过长度了,保存不了
chen870201 2013-09-24
  • 打赏
  • 举报
回复
估计和字符集也有关系吧
sdlwhgw 2013-09-24
  • 打赏
  • 举报
回复
引用 1 楼 hdhai9451 的回复:
它的length()为41,你把它的内容帖出来看看。 它的长度已经超过了字段定义的长度,你改为prodname varchar(100),问题不就解决了吗?
谢谢您的回答。 商品的名字是: 【寿司ネタ】生キハダマグロスライス_10・ 把字段改一下长度确实能解决这个问题,为什么这样的数据还能插到表里呢? 为什么2000 查询不报错,2008报错? 还有 一个奇怪的现象 在2000环境下 假设 Table1 就一个字段 类型是varchar(40) INSERT INTO Table1   SELECT Prodname FROM DB1.dbo.tabele2000 WHERE Prodname = '【寿司ネタ】生キハダマグロスライス_10・' 是可以执行成功的, 但是 INSERT INTO Table1 SELECT '【寿司ネタ】生キハダマグロスライス_10・' 就是失败了,报字段太长的错误。
唐诗三百首 2013-09-24
  • 打赏
  • 举报
回复
估计是含有特殊字符, 可以用dbcc page()查看一下数据页的内容.
  • 打赏
  • 举报
回复
2000 和 2008 的表的结构是一模一样的。 在2008的查询分析器里执行的是 INSERT INTO tabele2008 SELECT prodname ,列2 ,*** FROM [XXX.XXX.XXX.XXX].DB1.dbo.tabele2000 执行的时候直接报错 链接服务器 'XXX.XXX.XXX.XXX' 的 OLE DB 访问接口 'SQLNCLI10' 返回了对列 XXX.XXX.XXX.XXX].DB1.dbo.tabele2000.prodname'无效的数据。 而在2000 的查询分析器里执行 SELECT prodname ,列2 ,*** FROM DB1.dbo.tabele2000 却没有错误。 看下你的两个操作,一个是插入,一个是查询。当插入的时候,超过长度,自然插入不进去;
sdlwhgw 2013-09-24
  • 打赏
  • 举报
回复
关键什么情况下才能放进去啊? 2000,2008执行的结果也不一样。
Andy__Huang 2013-09-23
  • 打赏
  • 举报
回复
它的length()为41,你把它的内容帖出来看看。 它的长度已经超过了字段定义的长度,你改为prodname varchar(100),问题不就解决了吗?
内容概要:本文复现了硕士论文《可再生能源发电与电动汽车的协同调度策略研究》,聚焦于高渗透率背景下可再生能源(如光伏发电)与电动汽车(EV)在配电网中的协同运行问题。研究构建了涵盖电动汽车充放电行为、分布式光伏出力特性及静止无功补偿器(SVC)等关键元件的多资源协同配电网基础模型,并提出了包含设备安全、负荷平稳性、电能质量与系统效率的多维评价指标体系。进一步地,设计了基于熵权法与模糊综合评价相结合的双层评分模型,实现对不同渗透率下配电网承载能力的客观量化评估。通过算例仿真分析了电动汽车不同接入比例对系统各指标的影响规律,并开展了指标灵敏度分析,验证了所提模型在评估大规模电动汽车接入影响方面的有效性与实用性。; 适合人群:具备电力系统、电气工程或相关专业背景,熟悉Matlab编程与优化建模的研究生、科研人员及从事新能源并网、智能配电网规划的工程技术人员。; 使用场景及目标:①用于评估大规模电动汽车接入对配电网承载能力的影响;②为含高比例分布式可再生能源的配电系统规划与运行提供决策支持;③支撑学术研究中关于源-网-荷协同优化、电动汽车V2G调度等课题的模型构建与仿真验证。; 阅读建议:建议结合文中提供的Matlab代码进行实践操作,重点关注熵权法权重计算与模糊综合评价的实现逻辑,并尝试复现仿真结果以加深理解。同时可拓展至其他优化算法或引入更多不确定性因素以提升模型实用性。

22,296

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧