【问题标题】:Converting varchar to nvarchar in SQL Server failed在 SQL Server 中将 varchar 转换为 nvarchar 失败
【发布时间】:2014-05-07 18:33:06
【问题描述】:

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

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

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

感谢任何帮助。

【问题讨论】:

  • 您打算如何在nvarchar(9) 类型的列中存储文本"how I can change this data type to nvarchar (9) without getting a SQL Server truncation error"
  • 如果该列超过 9 个字符,您是否愿意丢失数据?
  • 嗨,我会将转换后的数据存储在同一个 SQl SERVER 表中,但在同一个表中的新 nvarchar (9) 大小字段中
  • 嗨,M Ali,是的,我愿意丢失数据。就目前而言,VARCHAR 50 列对于它包含的数据来说太大了。列内数据长度为9

标签: sql sql-server types type-conversion


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    由于您愿意丢失数据并且 nvarchar 将只能存储 9 个非 unicode 字符,因此从源表中仅选择 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 无效。但我使用更新语句将 nvarchar (9) 列设置为 (LEFT(LTRIM(Col1), 9)。我完美地更新了 nvarchar (9) 列。真诚感谢 Dave
    • 没问题很高兴它有帮助,这就是我所做的更新:)
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-19
          • 2013-04-07
          • 2011-12-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多