我正在运行SQL Server 2008 R2并且具有到Postgres数据库的链接服务器连接,并使用openquery()
在两者之间进行通信。如果我在Postgres数据库中在sql server上创建一个视图,则无论Postgres数据库中的字段类型如何,所有字段类型都是char
。
例如 - 此查询
SELECT *
FROM OPENQUERY(postgrez,
'Select
badgenumber As "badgenum"
,lastunlockdate As "Last Unlock"
,currentDate As "Today"
From doorswipesystem')
我的SQL Server端的所有字段都为char
- 但在Postgres端badgenumber
是int
,两个日期字段是日期。我如何在OpenQuery中保留原始数据类型?
修改
我尝试了@Kentaro在我的评论中发布的建议并使用了这种语法
SELECT Cast(badgenum As Int) As badgenum, Cast(lastunlockdate as datetime) As lastunlockdate,
Cast(Today As datetime) as currentDate
FROM OPENQUERY(postgrez,
'Select
badgenumber As "badgenum"
,lastunlockdate As "Last Unlock"
,currentDate As "Today"
From doorswipesystem')
但是我遇到了编译错误:
Msg 242,Level 16,State 3,Line 1
将varchar数据类型转换为日期时间数据类型会导致超出范围的值。
我在postgres数据库中验证了字段类型,它们是int&日期。我能想到的唯一可能是导致问题的是两个日期字段的空日期吗?