我正在使用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初学者,我只是不明白为什么这可能不起作用。表格中肯定有数据我选择了第一次导入,它仍然存在。什么都没有参考表格。
我错过了一些非常明显的东西吗?
答案 0 :(得分:6)
你的专栏:
ISO_2 varchar(2) DEFAULT 'Not Available'
ISO_3 varchar(3) DEFAULT 'Not Available'
您的列长度仅为2和3,并且您尝试在表中插入记录而不在这些列中放置任何内容,这意味着它将使用默认值。 “不可用”的默认值大于2和3个字符长,因此它不适合这些列。 “测试”也是如此。
每当您收到“字符串或二进制数据将被截断”消息时,这意味着您正试图将某些内容挤入数据太大的列中。不幸的是,SQL Server似乎并不想通过告诉您哪一列来提供帮助。