在SQL Server中将varchar转换为nvarchar失败

时间:2014-03-28 10:37:31

标签: sql sql-server types type-conversion

由于使用SQL Server导入向导进行CSV导入,我的SQL Server表包含varchar(50)类型的列。

我想知道如何在不收到SQL Server截断错误的情况下将此数据类型更改为nvarchar(9)

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

感谢任何帮助。

5 个答案:

答案 0 :(得分:3)

由于你愿意丢失数据,nvarchar只能存储9个非unicode字符,然后从你的源表中只选择9个字符,你做的是截断,而不是Sql server为你做的。

以下查询将修剪字符串中的任何空格,然后从字符串中只取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

答案 1 :(得分:0)

使用varchar(50)批量插入临时表并插入实际表

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

答案 2 :(得分:0)

检查目标表的字段类型也很重要。由于同样的错误,随机播放,修剪,子字符串花了3个小时,最后注意到,该同事创建的字段长度太短。 我希望它有助于某人...

答案 3 :(得分:0)

如果在导入/导出任务期间遇到此错误,则可以使用“编写查询以指定要传输的数据”选项中的select cast(xxx as nvarchar(yyy)) as someName

答案 4 :(得分:0)

varchar和nvarchar仅使用存储的数据所需的长度。如果您需要unicode支持,当然可以转换为nvarchar,但是将其从50修改为9-这样做有什么意义?

如果您的数据始终为9,请考虑使用char(9),并按照上面的转换建议之一...