SQL2008R2SP1的功能是调用另外10个存储过程 SP2-SP11.
SP2-11的功能是把传入的XML数据插入对应的表(table).现在通过SP1 来调用SP2,如果XML的某个数据有格式错误,则报错如下,比如:
Msg 50000, Level 16, State 5, Procedure SP2, Line 174
Main insert transaction failed (Id=38): Error converting data type nvarchar to float.OrderID=38就是传入的整个XML数据的ID,我们只知道这个XML(Id=38, Order_Number = '100101' )出错了,但是不知道具体是哪个xml段有错误。请问如何解决这个问题呢?调用程序如下:
BEGIN DECLARE @Id int
DECLARE @FileContents xml DECLARE MyCursor CURSOR FOR
SELECT XMLContent, [ID] FROM [dbo].[Table1]
WHERE Order_Number = '100101' //这个XML文件报错 OPEN MyCursor
FETCH NEXT FROM MyCursor INTO @FileContents, @Id
EXECUTE SP2 @FileContents
CLOSE MyCursorEND

解决方案 »

  1.   

    看信息是字符串转为float的时候出错的。
    你可以按照这个方向找问题。
    或者在sp2中部分转换列,看看到底哪里出问题。如果你想一下子找到这个出错的列,需要些很多语句,意义不大。
      

  2.   

    2008r2的话,使用调试(就是【执行】旁边的那个小绿色箭头),然后一行一行执行,可以看到你传入了什么参数到SP2,然后你手动执行SP2,就大概能够得到问题了。
      

  3.   

    感谢回复,但是我想输出具体哪个字段出的问题,这个XML里面有很多float的字段呢。
      

  4.   

    其实这个问题的初始原因是数据格式的问题,那为什么不对XML做Schema验证呢?这样在程序调用之前就确保了所有的XML是符合规范的。SQL Server是可以产生XSD的也可以做验证。 
      

  5.   

    Check this out:
    Validate an XML document in TSQL using XSD by Jacob Sebastian:http://blog.sqlauthority.com/2009/12/02/sql-server-validate-an-xml-document-in-tsql-using-xsd-by-jacob-sebastian/You could google lot of these info.