无法在SQL Server中更新表

时间:2014-12-12 20:07:37

标签: sql sql-server-2008 ssms

我正在使用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

我成功插入了以下内容:

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

现在我想在其中插入其他项目:

首先我尝试了:

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

得到错误:

  

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

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

INSERT INTO Staging.Country_code (Country, ISO_2, ISO_3, ISO_numeric)
VALUES ('Africa', 'Test', 'Test', 0);

仍然得到同样的错误。

我检查了表格中的数据类型,它们仍然与创建语句中的数据类型完全相同。

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

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

1 个答案:

答案 0 :(得分:6)

你的专栏:

ISO_2 varchar(2) DEFAULT 'Not Available'
ISO_3 varchar(3) DEFAULT 'Not Available'

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

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