Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Was sind parametrisierte SQL-Statements und wann anwenden? (https://www.delphipraxis.net/180665-sind-parametrisierte-sql-statements-und-wann-anwenden.html)

TRomano 6. Jun 2014 13:30

AW: Was sind parametrisierte SQL-Statements und wann anwenden?
 
Okay. Dann hatte ich das zu schnell gelesen ... es geht halt stramm dem langen WE zu :? :wink: !

Union 6. Jun 2014 13:31

AW: Was sind parametrisierte SQL-Statements und wann anwenden?
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1261579)
Kann jemand noch ein bisschen aus der Praxis von konkreten Datenbanken erzählen? Ich könnte mir jetzt vorstellen, dass ein DMBS es beispielsweise erlauben würde, den Tabellennamen selbst zu paramatrisieren, ein anderes hingegen nicht. Gibt es da was?

Tabellennamen lassen sich normalerweise nur über Tricks parametrisieren. Und dann dient das auch nicht der Optimierung und die Implementierung ist datenbankabhängig:
Code:
declare @c cursor as
select name,
      case
      when substring(name,2,1) between '0' and '9' then 1990 + cast(substring(name,2,1) as SQL_INTEGER)       
      else 2000 + Ascii(substring(name,2,1)) - 65
      end as Jahr
from rechnungen;
open @c;
try
   drop table #temp;    
catch all
end try;
create table #temp (Name char(8), Id integer);
while fetch @c do
  execute immediate
    'insert into #temp (Name, Id, Umsatz) '+
   'select name, b.id'+
   'from rechnungen inner join '+
        -- Hier wird der Name der Tabelle aus zwei Feldern des erzeugten Cursors gebildet
        -- In der gejointen Tabelle steht das Feld Umsatz
   '(select top 1 * from ['+Trim(convert(@c.Jahr, SQL_CHAR))+'\'+Trim(@c.name)+']) B '+
   'on True '+
   'where rechnungen.name = '''+@c.name+''';';
end while;
close @c;
-- Rückgabe-Datenmenge
select * from #temp;

Stevie 6. Jun 2014 14:58

AW: Was sind parametrisierte SQL-Statements und wann anwenden?
 
Zitat:

Zitat von jobo (Beitrag 1261594)
Ich kann zu Oracle konkret sagen, die Analyse der Abfrage erfolgt ganz stumpf nach Gleichheit. Ist die Abfrage nicht exakt identisch (select * from customer where nr = 1/select * from customer where nr = 2), sind es zwei verschiedene Abfragen und es werden beide analysiert.
Bei Parametern die dann als Platzhalter im Querytext konstant bleiben, erfolgt die Analyse nur bei der ersten Abfrage.

Das ist auch beim SQL Server so. D.h. mit unparametrisierten Queries kann man den Prozedurcache so richtig derbst zumüllen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:06 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz