我有這樣的事情:
var
text: string ; // data i take from table in my loop.
for a = 1 to 100 do
begin
query.SQL.Text := 'Update dbtable Set atext=' text ' Where id=' IntToStr(a);
query.ExecSQL;
end;
有沒有辦法避免呼叫ExecSQL()100 次?
uj5u.com熱心網友回復:
在這種特殊情況下,是的,只需呼叫ExecSQL().
如果 ID 是連續的,您可以這樣做:
var
text: string ; // data i take from table in my loop.
query.SQL.Text := 'Update dbtable Set atext=' QuotedStr(text) ' Where id >= 1 and id <= 100';
query.ExecSQL;
如果 ID 不是連續的,則可以使用in子句代替,但如果 ID 串列很大,則效率較低:
var
text: string ; // data i take from table in my loop.
query.SQL.Text := 'Update dbtable Set atext=' QuotedStr(text) ' Where id in [1, ..., 100]';
query.ExecSQL;
另一種選擇是在資料庫中創建一個存盤程序。讓它將文本和 ID 作為引數,然后在內部執行任何需要的回圈。然后,您可以在代碼中執行單個 SQL 陳述句來執行帶有引數值的存盤程序。
uj5u.com熱心網友回復:
var
text: string ;
begin
query.SQL.Text := 'UPDATE dbtable SET atext=' text ' WHERE id <= 100';
query.ExecSQL;
end;
uj5u.com熱心網友回復:
query.SQL.Clear;
for a = 1 to 100 do
begin
query.SQL.Add('Update dbtable Set atext=' text ' Where id=' IntToStr(a));
end;
query.ExecSQL;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/336030.html
標籤:sql 德尔福 delphi-xe2
上一篇:在SQL查詢中添加新列
下一篇:Oraclesql-案例
