我有SQL Server表,其中包含使用SQL Server导入向导导入CSV导致的varchar(50)
类型列。在SQL Server中将varchar转换为nvarchar失败
我想知道如何将此数据类型更改为nvarchar(9)
而不会收到SQL Server截断错误。
我试着做批量更新来设置我需要的数据类型和列大小,但仍然有截断错误消息,当我试图将csv加载到我创建的空数据库表中时(使用我所需的数据类型需要)。
感谢您的帮助。
我有SQL Server表,其中包含使用SQL Server导入向导导入CSV导致的varchar(50)
类型列。在SQL Server中将varchar转换为nvarchar失败
我想知道如何将此数据类型更改为nvarchar(9)
而不会收到SQL Server截断错误。
我试着做批量更新来设置我需要的数据类型和列大小,但仍然有截断错误消息,当我试图将csv加载到我创建的空数据库表中时(使用我所需的数据类型需要)。
感谢您的帮助。
既然你愿意损失数据和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
您好M Ali我得到一个参数数据类型文本对于ltrim函数的参数1是无效的。但我使用Update语句将nvarchar(9)列设置为(LEFT(LTRIM(Col1),9)。我完全更新了nvarchar(9)列。Sincere Dave – daveb
没有问题很高兴帮助,这就是我会做更新:) –
BULK INSERT与VARCHAR(50)临时表,并插入到实际表
insert into tableName
select cast(tempcolumn as nvarchar(9)) from temptable
同时,它也检查目标表的字段类型很重要。刚刚花了3个小时,因为与随机投射,修剪,子字符串相同的错误,并在最后注意到,该同事创建表的字段长度太短。 我希望它可以帮助别人......
如果您在导入/导出任务遇到这个错误,你可以在“编写一个查询来指定要传输的数据”选项
你打算如何使用
select cast(xxx as nvarchar(yyy)) as someName
例如,如何在'nvarchar(9)'类型的列中存储''我如何将这种数据类型更改为nvarchar(9)而不会发生SQL Server截断错误? –如果该列中的字符数超过9个,您是否愿意丢失数据? –
嗨,我会将转换后的数据存储在同一个SQl SERVER表中,但在同一个表中新的nvarchar(9)大小字段中 – daveb