SQL Server 2008 R2通过链接服务器查询Access的CAST转换问题
解决链接服务器从Access检索时CAST/CONVERT的问题
我之前碰到过类似的跨数据源类型转换坑,给你捋捋原因和解决办法:
你遇到的核心问题基本是CAST时没指定VARCHAR的长度。在SQL Server里,要是只写CAST([Cola] AS VARCHAR)不指定长度,默认会用30个字符的长度(不同场景下可能有细微差异,但大多时候是30)。如果Access里的Cola字段内容长度超过30,转换后的字符串会被直接截断,自然匹配不上'A123';哪怕长度没超,这种模糊的类型转换在链接服务器的跨数据源场景里也容易出各种奇怪的问题。
正确的用法示例
你只需要在CAST或CONVERT时明确指定足够的长度(比如Access文本字段常用的255,或者根据你实际的字段长度调整):
方法1:用CAST指定长度
SELECT Cola, Colb FROM MSAccess_LinkedServer...TableName WHERE CAST([Cola] AS VARCHAR(255)) = 'A123'
方法2:用CONVERT指定长度
效果和CAST一致,只是语法略有不同:
SELECT Cola, Colb FROM MSAccess_LinkedServer...TableName WHERE CONVERT(VARCHAR(255), [Cola]) = 'A123'
额外注意点
- 如果
Cola是Access里的备注(Memo)类型,建议换成VARCHAR(MAX)来转换,避免截断过长的内容:WHERE CAST([Cola] AS VARCHAR(MAX)) = 'A123' - 你也可以先查一下Access里
Cola字段的实际类型和长度,这样能更精准地指定转换后的长度,还能提升查询性能。
内容的提问来源于stack exchange,提问作者MAK
相关产品推荐
相关产品推荐

