SQL 对具有特殊字符和前导零的 varchar 进行 JOIN
SQL JOIN on varchar with special characters and leading zeros
我在 varchar
列上加入时遇到问题。
我将按产品代码从 Excel 数据更新 SQL 数据,但 Twr_Kod
是 varchar
,这是加入 [=] 的唯一方法28=]数据。
当有前导零时,转换为 varchar 也会出现问题。
select CDN.Towary.Twr_Kod, excel.Twr_Kod
from CDN.Towary
left join openrowset('Microsoft.ACE.OLEDB.12.0',
Excel 8.0;Database=C:\excel\towary.xlsx;',
'select * from [Arkusz1$]') excel
on cast(CDN.Towary.Twr_Kod as varchar) = cast(excel.Twr_Kod as varchar)
我知道加入 varchar 列不是一个好的解决方案,但这是必要的,所以请帮助解释为什么 cast 没有转换。
问题是因为您的 excel 列包含混合数据类型。 导入包含混合数据类型列的 csv 文件或 excel 文件时,它将用 null 替换非主导类型。 (使用 Oledb 或 Ace.Oledb)
解决方法
将 IMEX=1;
添加到您的 openrowset 连接字符串并添加包含文本值的虚拟第一行
关注我在 的回答以获取更多详细信息
我在 varchar
列上加入时遇到问题。
我将按产品代码从 Excel 数据更新 SQL 数据,但 Twr_Kod
是 varchar
,这是加入 [=] 的唯一方法28=]数据。
当有前导零时,转换为 varchar 也会出现问题。
select CDN.Towary.Twr_Kod, excel.Twr_Kod
from CDN.Towary
left join openrowset('Microsoft.ACE.OLEDB.12.0',
Excel 8.0;Database=C:\excel\towary.xlsx;',
'select * from [Arkusz1$]') excel
on cast(CDN.Towary.Twr_Kod as varchar) = cast(excel.Twr_Kod as varchar)
我知道加入 varchar 列不是一个好的解决方案,但这是必要的,所以请帮助解释为什么 cast 没有转换。
问题是因为您的 excel 列包含混合数据类型。 导入包含混合数据类型列的 csv 文件或 excel 文件时,它将用 null 替换非主导类型。 (使用 Oledb 或 Ace.Oledb)
解决方法
将 IMEX=1;
添加到您的 openrowset 连接字符串并添加包含文本值的虚拟第一行
关注我在