SQL Server 2022 PolyBase是否支持Sybase ASE 16的datetime字段?
解决PolyBase连接Sybase ASE时datetime类型不兼容问题
问题根源
Sybase ASE的datetime类型对应ODBC SQL_TYPE 11,而SQL Server 2022的PolyBase通用外部表不支持该类型,导致创建外部表时抛出兼容性错误。
解决方案
通过先将Sybase的datetime以字符串形式映射到外部表,再在SQL Server中转换为datetime类型的方式规避兼容性问题,具体步骤如下:
1. 修改外部表定义,用VARCHAR接收datetime列
将原外部表中的DATETIME类型替换为足够长度的VARCHAR(Sybase datetime的字符串格式通常为YYYY-MM-DD HH:MM:SS.fff,长度23即可):
CREATE EXTERNAL TABLE SYBASESCHEMA.SomeTable ( [SomeNiceTime_String] VARCHAR(23) NULL ) WITH (LOCATION = N'SomeNiceDatabase.dbo.SomeTable', DATA_SOURCE = SYBASE_DS);
2. 创建视图转换为DATETIME类型
通过视图将字符串列转换为SQL Server的DATETIME类型,方便后续查询使用:
CREATE VIEW SYBASESCHEMA.vw_SomeTable AS SELECT -- 若Sybase datetime格式为标准ODBC格式,直接CAST即可;格式特殊时用CONVERT指定样式 CONVERT(DATETIME, SomeNiceTime_String, 121) AS SomeNiceTime FROM SYBASESCHEMA.SomeTable;
3. 查询视图使用转换后的datetime数据
后续业务查询直接访问视图即可获取正确的datetime类型数据:
SELECT SomeNiceTime FROM SYBASESCHEMA.vw_SomeTable;
补充说明
- 若Sybase的datetime字符串格式与标准ODBC格式(
YYYY-MM-DD HH:MI:SS.FFF)不同,需调整CONVERT函数的样式参数,确保转换准确。 - 该方法适用于所有PolyBase不支持的外部数据源类型,核心思路是通过中间兼容类型(如VARCHAR)过渡,再转换为目标类型。
内容的提问来源于stack exchange,提问作者gadeynebram
相关产品推荐
相关产品推荐

