在 SQLQuery 中使用“:=”

Using ":=" in SQLQuery

我有一个查询正在调用带有命名参数的 postgres 存储过程。该过程可以采用许多参数,其中大部分都有默认值,我只想使用几个。 SQL 看起来像这样:

SELECT {(mytable).*} FROM myStoredProc(:p1, _namedParam := TRUE);

我在 p1 中绑定并添加 mytable 作为一个实体。但是,我得到 NHibernate.QueryException : Not all named parameters have been set: ['']——它似乎来自命名参数中的 :=

有没有办法避开那个冒号,这样我就可以通过这个了?我已经绑定了所有字符串等,但我不认为我可以像这样绑定语法,所以我需要 NHibernate 停止抱怨这个非参数。这个存储过程需要大约十几个参数,我在这里设置的是最后一个,所以我不想在我的 C# 代码中显式插入所有默认值。

您可以使用 =>:

而不是 :=(在 documentation 中被称为 "older syntax")
SELECT {(mytable).*} FROM myStoredProc(:p1, _namedParam => TRUE);

现在我不记得在 PostgreSQL 语法中使用冒号的任何其他地方,除了像 <value>::<type> 这样的类型转换(例如 '1'::integer),但它可以简单地替换为更通用的语法如 cast(<value> as <type>) 或简称 <type> <value>.