2014-03-28 374 views
1

我有SQL Server表,其中包含使用SQL Server导入向导导入CSV导致的varchar(50)类型列。在SQL Server中将varchar转换为nvarchar失败

我想知道如何将此数据类型更改为nvarchar(9)而不会收到SQL Server截断错误。

我试着做批量更新来设置我需要的数据类型和列大小,但仍然有截断错误消息,当我试图将csv加载到我创建的空数据库表中时(使用我所需的数据类型需要)。

感谢您的帮助。

+0

你打算如何使用select cast(xxx as nvarchar(yyy)) as someName例如,如何在'nvarchar(9)'类型的列中存储''我如何将这种数据类型更改为nvarchar(9)而不会发生SQL Server截断错误? –

+0

如果该列中的字符数超过9个,您是否愿意丢失数据? –

+0

嗨,我会将转换后的数据存储在同一个SQl SERVER表中,但在同一个表中新的nvarchar(9)大小字段中 – daveb

回答

3

既然你愿意损失数据和nvarchar将只能够存储9非Unicode charaters,则只能选择来自你的源表的9个字符,你做截断而不是Sql服务器为你做。

下面的查询将削减任何的空格从字符串,然后从字符串只需要9个字符,并将其转换为NVARCHAR(9)为您.....

CREATE TABLE New_TABLE (Col1 NVARCHAR(9), Col2 NVARCHAR(9)) 
GO 

INSERT INTO New_TABLE (Col1, Col2) 
SELECT CONVERT(NVARCHAR(9),LEFT(LTRIM(Col1), 9)) 
     ,CONVERT(NVARCHAR(9),LEFT(LTRIM(Col2), 9)) 
FROM Existing_Table 
GO 
+0

您好M Ali我得到一个参数数据类型文本对于ltrim函数的参数1是无效的。但我使用Update语句将nvarchar(9)列设置为(LEFT(LTRIM(Col1),9)。我完全更新了nvarchar(9)列。Sincere Dave – daveb

+0

没有问题很高兴帮助,这就是我会做更新:) –

0

BULK INSERT与VARCHAR(50)临时表,并插入到实际表

insert into tableName 
select cast(tempcolumn as nvarchar(9)) from temptable 
0

同时,它也检查目标表的字段类型很重要。刚刚花了3个小时,因为与随机投射,修剪,子字符串相同的错误,并在最后注意到,该同事创建表的字段长度太短。 我希望它可以帮助别人......

0

如果您在导入/导出任务遇到这个错误,你可以在“编写一个查询来指定要传输的数据”选项

相关问题