插入表SQL Server 2012时出错

时间:2015-04-03 15:34:24

标签: sql sql-server tsql

修改

我做了一切。但现在我收到了这个错误:

  

Msg 8152,Level 16,State 14,Line 1   字符串或二进制数据将被截断。   该语句已终止。

我知道我需要更改一个值,但不知道哪一个。这是表格:

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
    );                              

3 个答案:

答案 0 :(得分:1)

我认为您在此处遇到错误'2006-06-25',31,12,'2015-09-30'

如果我们看看你的创作

,DissolutionDate date
,IncorporationDate date
,Accounts_AccountRefDay tinyint
,Accounts_AccountsNextDueDate date
,Accounts_AccountsLastMadeUpDate date

只有1个小的int然后是日期。在您的插入中,其顺序与创建顺序相同,有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                                                      

);

您的第一个日期条目发生在第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(第15个元素是tinyint)

我建议重写整个VALUES部分

答案 1 :(得分: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语句将会产生以下错误:

  

消息241,级别16,状态1,行1转换时转换失败   字符串的日期和/或时间。

这是因为字符'2006-06-2006'已插入dateIncorporationDate。修复此问题将导致查询成功。

答案 2 :(得分:0)

为了不在SQL Server中为表执行DML命令时遇到问题,它有一个快捷方式,您需要做的就是更改所需的值 右键单击数据库上的表,然后单击脚本表格,然后选择所需的操作(插入到,更新到,删除到等)