我正在使用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初学者,我只是不明白为什么这可能不起作用.表格中肯定有数据我选择了第一次导入,它仍然存在.什么都没有参考表格.
我错过了一些非常明显的东西吗
你的专栏:
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似乎并不想通过告诉您哪一列来提供帮助.