2012-03-24 3 views
0

私は(T-SQLで)このSQLクエリを持っている:Npgsql:ODBCエスケープシーケンスを認識できますか?

--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 

その後、私はオートマジックの正規表現を持って、私は次の出力文を生成し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エスケープシーケンスを認識しないことを実現({FN何でも()})。

Npgsql接続文字列の設定に、私がオンにすることができるオプションがありますか、それともPostgres自体にありますか?
私は運が悪いですし、関数を置き換えるODBCエスケープ関数を書く必要がありますか?

+0

ODBCドライバ自体を使用したくないことに注意してください.Windowsのラッパーのモノラル実装は疑わしい品質です。 –

答えて

1

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

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

あなたは運が悪いです。

+0

間違っています。 Npgsqlがそれをサポートしていないのは事実ですから、運が悪いです。しかし、今週(週末後)には、ODBCのエスケープシーケンス構文パーサとリプレイサを作成しました。再帰によるネストされた文の解決を含む、素晴らしい動作 –

関連する問題