【发布时间】:2019-09-24 20:30:44
【问题描述】:
我正在开发一个 SSIS 包,它可以做很多事情,其中之一是将数据从一个数据库上的表复制到另一个数据库上的表。在我的一个包组件上,我收到了截断警告,因为源表有ColumnA NCHAR(10),而目标表有ColumnA NCHAR(1)。源表中的 ColumnA 只有 1 个字符长的值,所以理论上,我可以忽略收到的截断警告,因为源数据无论如何只有 1 个字符长。
我可以忽略这些警告是否正确? SQL 究竟如何截断这些实例中的数据?如果源列中只有一个字符包含 10 个字符,那么该字符是否总是被复制到目标,或者是否有可能连那个字符也不会被复制?
【问题讨论】:
-
如果你 100% 确定它总是“1”,并且如果没有其他人会使用这个“解决方案” - 那么是的,你可以忽略警告
-
它总是会带入 10 个字符串中的第一个字符。因此,如果您有前导空格,您将在目的地获得一个空格。
-
请记住,SQL Server 使用 UTF-16 编码,因此 nchar(1) 不能总是包含单个字符。感谢 Unicode 与代理字符的乐趣,以及 Supplementary Multilingual Plane(包含表情符号等)和 Supplementary Ideographic Plane,一些代码点使用多对字节表示。
标签: sql sql-server ssis truncation