我有一個 TParams 實體 (FParams),當我呼叫 ParseSQL() 時,如果給定的 SQL 包含多個對相同引數名稱的參考,它會復制引數。
例如:
FParams.ParseSQL(
'select * from user_relations where user1 = :p_logged_user or user2 = :p_logged_user',
True);
它生成兩個具有相同名稱的 TParams 項,這在我的代碼后面會引起問題。我知道 DB 訪問組件 (TUniQuery) 消除了這個問題,并且在決議它們的 SQL 文本時不會重復引數,但是我無法找到相關代碼,如何輕松地做到這一點。
是否有任何內置方法可以防止 TParams 存盤/決議重復引數?
我已經撰寫了代碼以在 ParseSQL() 之后立即擺脫它們,我只想知道我是否錯過了一些“開箱即用”的解決方案。
更新了示例代碼以明確為什么我想要兩個引數的名稱相同。我的意見是同名使代碼更簡單。
uj5u.com熱心網友回復:
如果您使用的是 SQL Server,則可以將 SQL 替換為:
Declare @P1 varchar(10)
set @P1 = :p_loggeduser
select * from user_relations where user1 = @P1 or user2 = @P1
我不知道哪些其他資料庫平臺會支持這種語法。
uj5u.com熱心網友回復:
對于某些資料庫,實際發送的內容使用?引數。對于某些資料訪問組件,引數串列是有序的,并且具有與?此版本查詢中的引數相同數量的條目。
select * from user_relations where user1 = ? or user2 = ?
Delphi 將 SQL 中的命名引數支持擴展到所有資料庫,并在幕后做額外的作業。其中的一個問題是引數串列可能比預期的要大,具體取決于所使用的資料訪問組件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/377372.html
