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查询分析器 执行出错的原因?


...全文
335 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),问题不就解决了吗?
内容概要:本文围绕城市场景下的无人机三维路径规划问题,提出了一种新颖的多目标粒子群优化算法(NMOPSO),旨在解决高维复杂环境中路径规划面临的多重挑战。研究聚焦于导航变量的多目标优化,构建了一个包含路径长度、飞行安全性、能量消耗等多个相互冲突目标的优化模型,并采用改进的粒子群算法进行高效搜索,最终获得一组Pareto最优解集,为实际决策提供多样化路径选择方案。该方法结合Matlab代码实现,详细阐述了算法的设计机制、数学建模流程及仿真验证过程,充分展示了其在密集城市建筑环境中有效规避障碍物、满足飞行动力学约束并实现多目标权衡的能力,具有较强的工程应用价值。; 适合人群:具备一定优化算法理论基础和Matlab编程能力,从事无人机路径规划、智能交通系统、自动化控制、人工智能应用等方向研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于城市环境中的无人机物流配送、巡检监控、应急救援等实际任务的三维路径规划;②为高维、非线性、多约束的多目标优化问题提供有效的算法设计思路与改进参考;③通过Matlab仿真平台复现算法,进一步开展性能测试、参数调优与算法对比研究,推动相关领域的技术创新。; 阅读建议:此资源强调算法原理与工程实践的深度融合,建议读者重点研读目标函数的构建方式、约束条件的处理策略以及NMOPSO算法的核心改进机制,并务必动手运行和调试所提供的Matlab代码,以深入理解算法在三维空间路径优化中的具体实现细节与实际表现。

22,296

社区成员

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

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