无法在SQL Server中更新表

0 sql ssms sql-server-2008

我正在使用SQL Server和SSMS 2008.我在正确的数据库中.

对不起,如果这很明显.我有以下表没有PK开始,所以我可以轻松地进行更改,直到该过程适合我

CREATE TABLE Staging.Country_code 
(
    Country varchar(200) NOT NULL,
    ISO_2 varchar(2) DEFAULT 'Not Available',
    ISO_3 varchar(3) DEFAULT 'Not Available',
    ISO_numeric int
)
GO
Run Code Online (Sandbox Code Playgroud)

我成功插入以下内容:

INSERT INTO Staging.Country_code (Country, ISO_2, ISO_3, ISO_Numeric)
   SELECT Country, ISO_2, ISO_3, ISO_Numeric
   FROM RawStaging.Country_code
   WHERE Country IS NOT NULL
GO
Run Code Online (Sandbox Code Playgroud)

现在我想插入其他项目:

首先我试过:

INSERT INTO Staging.Country_code (Country)
   SELECT DISTINCT 
      Staging.allYears.Country 
   FROM 
      Staging.allYears
   WHERE 
      Staging.allYears.Country NOT IN (SELECT DISTINCT Staging.Country_code.Country 
                                       FROM Staging.Country_code)
GO
Run Code Online (Sandbox Code Playgroud)

并得到错误:

消息8152,级别16,状态14,行1
字符串或二进制数据将被截断.该语句已终止.

然后我尝试了简单的尝试(包括尝试转换为varchar(200)单个文本项以将其插入Country列中):

INSERT INTO Staging.Country_code (Country, ISO_2, ISO_3, ISO_numeric)
VALUES ('Africa', 'Test', 'Test', 0);
Run Code Online (Sandbox Code Playgroud)

仍然得到相同的错误.

我检查了表上的数据类型,它们仍然与create语句中的数据类型完全相同.

我只是一个SQL初学者,我只是不明白为什么这可能不起作用.表格中肯定有数据我选择了第一次导入,它仍然存在.什么都没有参考表格.

我错过了一些非常明显的东西吗

Joe*_*nos 6

你的专栏:

ISO_2 varchar(2) DEFAULT 'Not Available'
ISO_3 varchar(3) DEFAULT 'Not Available'
Run Code Online (Sandbox Code Playgroud)

您的列长度仅为2和3,并且您尝试在表中插入记录而不在这些列中放置任何内容,这意味着它将使用默认值."不可用"的默认值大于2和3个字符长,因此它不适合这些列."测试"也是如此.

每当您收到"字符串或二进制数据将被截断"消息时,这意味着您正试图将某些内容挤入数据太大的列中.不幸的是,SQL Server似乎并不想通过告诉您哪一列来提供帮助.