none
插入数据时,显示数据被截断...语句中止!错误 RRS feed

  • 问题

  • SQL版本:SQLEXPRESS+ASP.Net

    表结构如下:

    CREATE TABLE [dbo].[Contracts](
     [ID] [nchar](30),
     [SignUpDate] [smalldatetime] NULL,
     [Customer_ID] [bigint] NOT NULL,
     [WeightDifference] [nvarchar](1000)  NULL,
     [Quality] [nvarchar](1000)  NULL,
     [Casing] [nvarchar](1000)  NULL,
     [DeliveryClause] [nvarchar](1000)  NULL,
     [FreightModeAndFee] [nvarchar](1000)  NULL,
     [CheckandAccept] [nvarchar](800) NULL,
     [Appurtenance] [nvarchar](500)  NULL,
     [CashClause] [nvarchar](1200)  NULL,
     [AssureClause] [nvarchar](800)  NULL,
     [FellBackforVendee] [nvarchar](1200)  NULL,
     [FellBackforSaler] [nvarchar](1200) NULL,
     [GoIntoEffectDate] [smalldatetime] NULL,
     [DisputedVerdict] [nvarchar](1000) NULL,
     [ForceMajeure] [nvarchar](1000)  NULL,
     [TimeLimit] [nvarchar](500) COLLATE  NULL,
     [OtherClause] [nvarchar](1000) COLLATE NULL,
     [Description] [nvarchar](500) COLLATE  NULL,
     [SellSigner] [nchar](10) COLLATE  NULL,
     [UserName] [nchar](10) COLLATE  NULL  DEFAULT user_name(),
     [EnterTime] [datetime] NULL  DEFAULT getdate(),
     CONSTRAINT [PK_Contracts] PRIMARY KEY CLUSTERED

    )

    但在插入数据时出现"将截断字符串或二进制数据..."错误.但字符串的长度没有超过该字段设定的长度

    请问是为什么,如何解决.

    另,该存入的数据中,可能含有\r\n之类的换符,是否是这个原因呢.

    2010年4月1日 8:15

答案

  • Row length of the table exceeds 8060 charcters, that's limit of sql server. Can change some columns' data type to nvarchar(max).
    2010年4月1日 12:57
  • SQL版本:SQLEXPRESS+ASP.Net

    表结构如下:

    CREATE TABLE [dbo].[Contracts](
     [ID] [nchar](30),
     [SignUpDate] [smalldatetime] NULL,
     [Customer_ID] [bigint] NOT NULL,
     [WeightDifference] [nvarchar](1000)  NULL,
     [Quality] [nvarchar](1000)  NULL,
     [Casing] [nvarchar](1000)  NULL,
     [DeliveryClause] [nvarchar](1000)  NULL,
     [FreightModeAndFee] [nvarchar](1000)  NULL,
     [CheckandAccept] [nvarchar](800) NULL,
     [Appurtenance] [nvarchar](500)  NULL,
     [CashClause] [nvarchar](1200)  NULL,
     [AssureClause] [nvarchar](800)  NULL,
     [FellBackforVendee] [nvarchar](1200)  NULL,
     [FellBackforSaler] [nvarchar](1200) NULL,
     [GoIntoEffectDate] [smalldatetime] NULL,
     [DisputedVerdict] [nvarchar](1000) NULL,
     [ForceMajeure] [nvarchar](1000)  NULL,
     [TimeLimit] [nvarchar](500) COLLATE  NULL,
     [OtherClause] [nvarchar](1000) COLLATE NULL,
     [Description] [nvarchar](500) COLLATE  NULL,
     [SellSigner] [nchar](10) COLLATE  NULL,
     [UserName] [nchar](10) COLLATE  NULL  DEFAULT user_name(),
     [EnterTime] [datetime] NULL  DEFAULT getdate(),
     CONSTRAINT [PK_Contracts] PRIMARY KEY CLUSTERED

    )

    但在插入数据时出现"将截断字符串或二进制数据..."错误.但字符串的长度没有超过该字段设定的长度

    请问是为什么,如何解决.

    另,该存入的数据中,可能含有\r\n之类的换符,是否是这个原因呢.


    和\r\n没关系, 原因是输入数据的长度超过了字段定义的长度,  例如 c char(2),  但输入为 'abc',这时就会出现你遇到的错误.

    而且你的create table语句本身有错误...collate后面没有指定collationname, 还有constraint也有错误


    有dba的职位吗(北京的),请联系我 stswordman#hotmail.com
    2010年4月2日 18:44
    版主

全部回复

  • 你用len()测试一下有可能会超过的列


    我是天生我怕谁?
    2010年4月1日 8:35
  • Row length of the table exceeds 8060 charcters, that's limit of sql server. Can change some columns' data type to nvarchar(max).
    2010年4月1日 12:57
  • SQL版本:SQLEXPRESS+ASP.Net

    表结构如下:

    CREATE TABLE [dbo].[Contracts](
     [ID] [nchar](30),
     [SignUpDate] [smalldatetime] NULL,
     [Customer_ID] [bigint] NOT NULL,
     [WeightDifference] [nvarchar](1000)  NULL,
     [Quality] [nvarchar](1000)  NULL,
     [Casing] [nvarchar](1000)  NULL,
     [DeliveryClause] [nvarchar](1000)  NULL,
     [FreightModeAndFee] [nvarchar](1000)  NULL,
     [CheckandAccept] [nvarchar](800) NULL,
     [Appurtenance] [nvarchar](500)  NULL,
     [CashClause] [nvarchar](1200)  NULL,
     [AssureClause] [nvarchar](800)  NULL,
     [FellBackforVendee] [nvarchar](1200)  NULL,
     [FellBackforSaler] [nvarchar](1200) NULL,
     [GoIntoEffectDate] [smalldatetime] NULL,
     [DisputedVerdict] [nvarchar](1000) NULL,
     [ForceMajeure] [nvarchar](1000)  NULL,
     [TimeLimit] [nvarchar](500) COLLATE  NULL,
     [OtherClause] [nvarchar](1000) COLLATE NULL,
     [Description] [nvarchar](500) COLLATE  NULL,
     [SellSigner] [nchar](10) COLLATE  NULL,
     [UserName] [nchar](10) COLLATE  NULL  DEFAULT user_name(),
     [EnterTime] [datetime] NULL  DEFAULT getdate(),
     CONSTRAINT [PK_Contracts] PRIMARY KEY CLUSTERED

    )

    但在插入数据时出现"将截断字符串或二进制数据..."错误.但字符串的长度没有超过该字段设定的长度

    请问是为什么,如何解决.

    另,该存入的数据中,可能含有\r\n之类的换符,是否是这个原因呢.


    和\r\n没关系, 原因是输入数据的长度超过了字段定义的长度,  例如 c char(2),  但输入为 'abc',这时就会出现你遇到的错误.

    而且你的create table语句本身有错误...collate后面没有指定collationname, 还有constraint也有错误


    有dba的职位吗(北京的),请联系我 stswordman#hotmail.com
    2010年4月2日 18:44
    版主
  • Thanks for rmiao,stswordman and pengzi

     

    2010年4月22日 6:54