sql-server – SQL错误:字符串或二进制数据将被截断

前端之家收集整理的这篇文章主要介绍了sql-server – SQL错误:字符串或二进制数据将被截断前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在一个称为Telligent的社区平台上进行集成.我正在使用名为BlogML的第三方加载项,将 XML文件(以BlogML格式)的博客文章导入到我本地的Telligent网站. Telligent平台在SDK中提供了许多课程,以便我可以通过编程方式添加内容,例如博客帖子.例如.
myWeblogService.AddPost(myNewPostObject);

我使用的BlogML应用程序基本上解析XML并创建博客帖子对象,然后使用上述示例行的代码将其添加站点.大约40后导入我得到一个sql错误

Exception Details: System.Data.sqlClient.sqlException:
String or binary data would be truncated.
The statement has been terminated.

我相信这个错误意味着我试图将太多的数据插入到具有最大大小限制的db字段中.不幸的是,我不知道这是一个问题的领域.我在执行导入时运行sql Server Profiler,但我似乎看不到出现错误的存储过程.有另一种方法可以使用分析器或另一种工具来查看什么存储过程,甚至是什么字段引起的错误?有什么其他提示可以获取更多的信息,特别是在哪里看?

哦,第三方工具的快乐…

解决方法

你是正确的,因为异常是由于试图将太多的数据填充到基于字符/二进制的字段中.如果您正在捕获正确的事件,运行跟踪应该可以让您看到哪个过程/语句抛出异常,那么您想要捕获的事件将包括

> sql:BatchStarting
> sql:BatchCompleted
> sql:StmtStarting
> sql:StmtCompleted
> RPC:开始
> RPC:已完成
SP:开始
SP:完成
> SP:StmtStarting
> SP:StmtCompleted
>异常

如果你确定它是一个包含错误代码的存储过程,你可以避免捕获#的1-4.确保捕获跟踪中的所有相关列(如果使用Profiler工具运行跟踪,则应为默认值). Exception类将包括跟踪中的实际错误,这应该允许您在抛出异常的同一SPID中看到紧邻的前一条语句.除了已完成的事件之外,还必须包括起始事件,因为发生的异常将排除相关联的完成事件在跟踪中触发.

如果您可以将跟踪过滤到特定的数据库,应用程序,主机名等,如果您处于忙碌的服务器,那么这样做一定会使调试变得更容易,但是如果您处于空闲服务器上,则可能不需要打扰过滤.

假设您正在使用sql 2005,该跟踪将包含一个名为“EventSequence”的列,该列基本上是事件触发序列排序的递增值.一旦您运行跟踪并捕获输出,找到触发的“异常”事件(如果您使用概要分析器,则该行将为红色),那么您应该能够简单地找到最新的SP:StmtStarting或sql:在Exception之前发生的相同SPID的StmtStarting事件.

这是我拍摄的一个截图的屏幕截图,它重现与你的事件相似的事件:

alt text http://i47.tinypic.com/1zc01mo.jpg

您可以在红色中看到异常行,并且突出显示的行是在相同SPID的异常之前触发的SP:StmtStarting事件之前的立即数.如果要查找此语句是其中一部分的存储过程,请查找ObjectName和/或ObjectId列中的值.

猜你在找的MsSQL相关文章