2015-04-03 60 views
-2

编辑错误插入表中的SQL Server 2012时

我重新做的一切。但现在我得到这个错误:

Msg 8152, Level 16, State 14, Line 1 String or binary data would be truncated. The statement has been terminated.

我知道我需要改变一个值,但不知道哪一个。下面是表:

USE MasterAddress 
Create Table CompanyAddress1 
(
    ID int IDENTITY(1,1) PRIMARY KEY 
    ,CompanyName varchar (MAX) 
    ,CompanyNumber varchar (MAX) 
    ,RegAddress_CareOf varchar(MAX) 
    ,RegAddress_POBox varchar (MAX) 
    ,RegAddress_AddressLine1 varchar (MAX) 
    ,RegAddress_AddressLine2 varchar(MAX) 
    ,RegAddress_PostTown varchar (MAX) 
    ,RegAddress_County varchar(MAX) 
    ,RegAddress_Country varchar(MAX) 
    ,RegAddress_PostCode varchar (15) 
    ,CompanyCategory varchar (MAX) 
    ,CompanyStatus varchar (MAX) 
    ,CountryOfOrigin varchar 
    ,DissolutionDate date 
    ,IncorporationDate date 
    ,Accounts_AccountRefDay tinyint 
    ,Accounts_AccountRefMonth tinyint 
    ,Accounts_AccountsNextDueDate date 
    ,Accounts_AccountsLastMadeUpDate date 
    ,Accounts_AccountCategory varchar (MAX) 
    ,[Returns_NextDueDate] date 
    ,[Returns_LastMadeUpDate] date 
    ,Mortgages_NumMortCharges int 
    ,Mortgages_NumMortOutstanding int 
    ,Mortgages_NumMortPartSatisfied int 
    ,Mortgages_NumMortSatisfied int 
    ,SICCode_SicText_1 varchar (MAX) 
    ,SICCode_SicText_2 varchar (MAX) 
    ,SICCode_SicText_3 varchar (MAX) 
    ,SICCode_SicText_4 varchar (MAX) 
    ,LimitedPartnerships_NumGenPartners varchar(MAX) 
    ,LimitedPartnerships_NumLimPartners varchar(MAX) 
    ,URI varchar (MAX) 
    ,PreviousName_1CONDATE varchar (MAX) 
    ,PreviousName_1CompanyName varchar (MAX) 
    ,PreviousName_2CONDATE varchar (MAX) 
    ,PreviousName_2CompanyName varchar (MAX) 
    ,PreviousName_3CONDATE varchar (MAX) 
    ,PreviousName_3CompanyName varchar (MAX) 
); 

,这里是插入:

INSERT INTO CompanyAddress1 
    VALUES (
    'BARDOG NEW OPCO LIMITED OPCO LIMITED' 
    ,'5843995' 
    ,NULL 
    ,NULL 
    ,'SUITE 555 SECOND FLOOR' 
    ,'DESIGN CENTRE EAST MILL' 
    ,'YORK' 
    ,NULL 
    ,NULL 
    ,'P05T K0DE'  
    ,'Private Limited Company' 
    ,'Active' 
    ,'United Kingdom' 
    ,NULL 
    ,'2006-06-2006' 
    ,31 
    ,12 
    ,'2015-09-30' 
    ,'2013-12-31' 
    ,'FULL' 
    ,'2015-07-19' 
    ,'2014-07-14' 
    ,0 
    ,0 
    ,0 
    ,0 
    ,'74990 - Non-trading company' 
    ,'86900 - Other human health activities' 
    ,NULL 
    ,NULL 
    ,0 
    ,0 
    ,'http://biszness.data.gov/id/company/05843995' 
    ,NULL 
    ,NULL 
    ,NULL 
    ,NULL 
    ,NULL 
    ,NULL 
    );        
+0

什么原因引用“'Returns_NextDueDate”日期? – Mackan 2015-04-03 15:46:57

+0

当我创建它的时候,退货是不允许的,只有当我这样封闭时才能工作。 – 2015-04-03 16:06:09

+0

开始一次添加一个em,看看它在哪里破坏。 – Paparazzi 2015-04-03 16:17:58

回答

1

我认为,如果我们看一看你创建

,DissolutionDate date 
,IncorporationDate date 
,Accounts_AccountRefDay tinyint 
,Accounts_AccountsNextDueDate date 
,Accounts_AccountsLastMadeUpDate date 
你这里有一个错误 '2006-06-25',31,12,'2015-09-30'

只有1个小的整数,然后是日期。在您的插入,它遵循相同的顺序为您创造,有31,12然后另一个日期

为此您要在Accounts_AccountsNextDueDate

增加12让和我知道,如果它不是,我可以看看看看是否有其他错误

编辑:您输入值的顺序仍然是错误的

VALUES 
    ('BARDOG NEW OPCO LIMITED','5555555',NULL,NULL,'SUITE 555 SECOND FLOOR',  
    'DESIGN CENTRE EAST MILL','YORK',NULL,NULL,'PO5T K0DE', 
    'Private Limited Company','Active','United Kingdom',NULL, '2006-06-25',31,'2015-09-30','2015-09-30',  
    'FULL','2015-05-30','2014-06-25',0,0,0,0,'74990-Non-trading company', '86900 - Other human health activities',NULL, NULL, 
    0,0, 'http://business/company/11111111',NULL,NULL,NULL, 12              

); 

你的拳头日期输入发生在日e第15个元素。

(CompanyName 
    ,CompanyNumber 
    ,RegAddress_CareOf 
    ,RegAddress_POBox 
    ,RegAddress_AddressLine1 
    ,RegAddress_AddressLine2 
    ,RegAddress_PostTown 
    ,RegAddress_County 
    ,RegAddress_PostCode 
    ,CompanyCategory 
    ,CompanyStatus 
    ,CountryOfOrigin 
    ,DissolutionDate 
    ,IncorporationDate 
    ,Accounts_AccountRefDay 

在您的插入顺序中,您的第一个日期是在第13个元素。 要插入日期为,Accounts_AccountRefDay(这是一个TINYINT的15元)

我建议重写整个VALUES部分

+0

我没有仔细检查,但是...没有理由插入应该遵循与创建的顺序相同。只要插入字段和值匹配,就不会有问题。 – Mackan 2015-04-03 15:48:56

+0

他的插入遵循与创建相同的顺序,所以他的值也应该为 – micbobo 2015-04-03 15:51:30

+0

如果是这样的话,是的。但是,你应该编辑你的答案来反映这一点。跳过referal到创建,而是参考实际的插入(i.m.o.):) – Mackan 2015-04-03 15:52:25

1

MSDN article about char[(n)] and varchar[(n)] data types。如果没有指定n,则假定n为1.因此,您定义的CountryOfOrigin varchar将该列限制为1个字符。

您可以在INFORMATION_SCHEMA.Columns看到:

select * from information_schema.columns 
where table_name = 'CompanyAddress1' 
and column_name = 'CountryOfOrigin' 

结果表明CHARACTER_MAXIMUM_LENGTH是1.您的INSERT语句将'United Kingdom'进去。这是什么原因造成的错误String or binary data would be truncated.

如果解决这个问题,您INSERT声明接下来将生成以下错误:

Msg 241, Level 16, State 1, Line 1 Conversion failed when converting date and/or time from character string.

这是因为串'2006-06-2006'被插入dateIncorporationDate。修复这将导致查询成功。

0

如果您在SQL Server中为表执行DML命令时没有任何问题,那么您需要做的就是更改所需的值 右键单击数据库上的表,然后单击脚本表为然后选择你想要的动作(插入到,更新到,删除到,等等)