将 TSQL 转换为 Postgresql - SQL 错误:错误:“[”处或附近的语法错误
Posted
技术标签:
【中文标题】将 TSQL 转换为 Postgresql - SQL 错误:错误:“[”处或附近的语法错误【英文标题】:Converting TSQL to Postgresql - SQL Error: ERROR: syntax error at or near "[" 【发布时间】:2021-11-10 00:05:26 【问题描述】:我正在尝试将 TSQL 转换为 PostgreSQL
脚本如下,
select v.ASSET_NUM, v.SERIAL_NUM, xm.NAME, xm.*
from [SiebelDB].[dbo].[S_ASSET] v (nolock)
inner join [SiebelDB].[dbo].[S_ASSET_XM] xm (nolock) on xm.PAR_ROW_ID = v.ROW_ID
where
xm.TYPE = 'Service Plan'
and xm.NAME like 'G3%'
我收到一个错误,例如“[”或附近的语法错误 位置:54
有什么帮助吗?
【问题讨论】:
当你想要的结果是 PostgreSQL 时不要标记 SQL Server - 你需要 PostgreSQL 方面的专家。 Bad habits: putting nolock everywhere 这真的是 Postgresql 吗?dbo
和 (nolock)
是 Sql Server 的东西(无论如何你都不应该像这样使用 nolock
)。但如果是 Postgresql,该数据库不会使用方括号来标记对象名称。
@JoelCoehoorn OP 想要从 SQL Server 转换,但似乎尚未开始转换。
提示:从清理仍在 SQL Server 中的代码开始。例如。删除(nolock)
,切换到ANSI SQL 投诉分隔符"S_ASSET"
,等等。验证它仍然有效。然后转到 Postgresql。
【参考方案1】:
Postgresql 不使用[]
字符来标记对象名称。它也不会以同样的方式处理模式。最后,它没有相同的提示机制(你不应该像在 Sql Server 中那样首先使用nolock
,anway)。
对于 Postgresql,我能得到的最接近的结果倾向于如下所示:
select v.ASSET_NUM, v.SERIAL_NUM, xm.NAME, xm.*
from S_ASSET v
inner join S_ASSET_XM xm on xm.PAR_ROW_ID = v.ROW_ID
where xm.TYPE = 'Service Plan'
and xm.NAME like 'G3%';
数据库和任何架构上下文由连接属性确定。我说,“倾向于”,因为与 Sql Server 相比,我无法确定您的 postgresql 表是如何设置的。
【讨论】:
Postgres 使用模式的方式与 SQL Server 几乎相同。两者对待数据库的方式不同。以上是关于将 TSQL 转换为 Postgresql - SQL 错误:错误:“[”处或附近的语法错误的主要内容,如果未能解决你的问题,请参考以下文章
如何将此 Informix 嵌套联接转换为 tsql 嵌套联接?
TSQL:如何将本地时间转换为 UTC? (SQL Server 2008)