0

私はこのSQLクエリを持っています(T-SQLで):

--DECLARE @strTerm varchar(300) 
--SET @strTerm = 'c' 


SELECT TOP 10 
   USR_ID 
  ,USR_UserName
FROM T_Benutzer 

WHERE (1=1) 
--AND {fn LCASE(USR_UserName)} LIKE {fn LCASE(@strTerm + '%')} 
AND {fn LCASE(BE_User)} LIKE {fn LCASE({fn CONCAT(@strTerm, '%')} )} 
--AND BE_Hide = 0  
AND BE_Hide = 'false' 

ORDER BY USR_UserName

次に、スイッチをオンにできるautomagic regex変換を使用して、最上位の構文をPostgreSQLと互換性のあるものにします。これにより、入力ステートメントから次の出力ステートメントが生成されます。

SELECT 
   USR_ID 
  ,USR_UserName 
FROM T_Benutzer 
WHERE (1=1) 
AND {fn LCASE(BE_User)} LIKE {fn LCASE({fn CONCAT(@strTerm, '%')} )} 
AND BE_Hide = 'false' 
ORDER BY USR_UserName 
LIMIT 10 

PostgreSQLでほとんどのものを動作させるにはこれで十分だと思いましたが、NpgsqlがODBCエスケープシーケンス({fnwhatever()})を認識しないことに気付きました。

Npgsql接続文字列設定でオンにできるオプション、またはPostgres自体にオプションはありますか?
または、運が悪かったので、ODBCエスケープ関数の置換関数を作成する必要がありますか?

4

1 に答える 1

1

PostgreSQLサーバー自体には、そのような関数のエスケープ構文はありません。このエスケープ構文の全体的な目的は、いくつかのDB方言を抽象化することです。これを特定のサーバーに正確に移動することは、せいぜい疑わしいでしょう。

Npgsqlのマニュアルには、その目的のためのエスケープ処理や接続文字列パラメータについては記載されていません。

だからあなたは運が悪い。

于 2012-03-25T12:07:29.003 に答える