Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Stored Procedure. Tabelle als Parameter möglich ? (https://www.delphipraxis.net/60887-sql-stored-procedure-tabelle-als-parameter-moeglich.html)

Ferber 13. Jan 2006 16:03

Datenbank: MSDE • Zugriff über: ADO

SQL Stored Procedure. Tabelle als Parameter möglich ?
 
Habe folgende Stored Procedure
SQL-Code:
Create Procedure DieLetzten (@n int, @aTableName varchar(2))
As
  SET ROWCOUNT @n
  if @aTableName = 'AN' Select Nummer, Datum from dbo.AN order BY Nummer DESC ELSE
  if @aTableName = 'AR' Select Nummer, Datum from dbo.AR order BY Nummer DESC ELSE
  if @aTableName = 'AU' Select Nummer, Datum from dbo.AU order BY Nummer DESC ELSE
  if @aTableName = 'BE' Select Nummer, Datum from dbo.BE order BY Nummer DESC ELSE
  if @aTableName = 'LS' Select Nummer, Datum from dbo.LS order BY Nummer DESC ELSE
  if @aTableName = 'MS' Select Nummer, Datum from dbo.MS order BY Nummer DESC
return
funktioniert, erscheint mir jedoch furchtbar umständlich.

Kann man nicht die Tabelle als Parameter übergeben? Hab's selbst nicht geschafft.
In etwa so:
SQL-Code:
Create Procedure DieLetzten(@n int, @aTable table)
As
  SET ROWCOUNT @n
  Select Nummer, Datum from @aTable order BY Nummer DESC
return
Kann man das Ergebnis einer Stored Procedure in einer Variablen speichern (ähnlich einem Recordset in VBA) ?
In etwa so:
SQL-Code:
SET TheLast10 = Exec DieLetzten 10, "AR"
oder Filtern
SQL-Code:
SELECT * from DieLetzen(10, AR) where Datum=@aDatum
Gibt's irgendwo ein Tutorial was man mit SP's oder Triggern machen darf und was nicht ?
Viele Fragen gleichzeitig, das ist alles so anders als mit Tabellen in Delphi.

An den SP's und Tabellen bastle ich mit einem Access-Projekt herum, gibt's da was besseres das wenig (oder nix) kostet ?
Der Zugriff von Delphi via ADO funktioniert prächtig.

THX im Vorraus

shmia 13. Jan 2006 17:07

Re: SQL Stored Procedure. Tabelle als Parameter möglich ?
 
Zitat:

Zitat von Ferber
...funktioniert, erscheint mir jedoch furchtbar umständlich.

Du musst alle Daten in eine Tabelle packen. Die Tabelle erhält zusätzlich
ein weiteres Feld, dass deine Kennungen AN, AR, AU, BE ... aufnimmt.
Danach brauchst du nur noch:
SQL-Code:
Create Procedure DieLetzten (@n int, @aTableName varchar(2))
As
  SET ROWCOUNT @n
  Select Nummer, Datum from dbo.Tabelle order BY Nummer DESC
  WHERE Kennung=@aTableName
return

marabu 13. Jan 2006 17:18

Re: SQL Stored Procedure. Tabelle als Parameter möglich ?
 
Hallo.

Eine vollständige Referenz für Transact-SQL findest du auf der MSDN WebSite: klick

Oft, wenn dir etwas umständlich vorkommt, ist irgendwo der Wurm drin. In dem von dir geschilderten Fall liegt ein Datenmodellierungsfehler vor, wie Andreas schon geschrieben hat, während ich verzweifelt die richtigen Tasten auf meinem Keyboard suchte. Wenn die Tabellen einen identischen Aufbau haben, dann solltest du sie auch in einer einzigen Tabelle speichern, eventuell mit einem zusätzlichen Diskriminator.

Ich weiß nicht, was du mit RowCount vorhast - die 10 letzten Einträge kannst du mit einem SELECT TOP 10 ... ORDER BY ... DESC Statement erhalten.

Besser als Access ist auf jeden Fall die MSDE.

Freundliche Grüße vom marabu

Ferber 13. Jan 2006 18:03

Re: SQL Stored Procedure. Tabelle als Parameter möglich ?
 
Danke für Eure Antworten.
Muss wohl etwas umdenken beim Umstieg auf SQL.
Das mit dem Rowcount hab ich hier im Forum gefunden.
SQL-Code:
SELECT TOP 10 ... ORDER BY ... DESC
ist natürlich viel besser.
Werd' Euch wohl in nächster Zeit mit weiteren SQL-Fragen quälen müssen.
THX im Vorraus.

joachimd 16. Jan 2006 12:08

Re: SQL Stored Procedure. Tabelle als Parameter möglich ?
 
Zitat:

Zitat von Ferber
Kann man nicht die Tabelle als Parameter übergeben? Hab's selbst nicht geschafft.

wird eventuell
SQL-Code:
EXECUTE IMMEDIATE _string_
unterstützt? Dann kannst Du Dir das SQL Statement dynamisch zusammenbauen, irgendiwe so:
SQL-Code:
sql='select * from '+tbname;
execute immediate sql;

generic 16. Jan 2006 12:25

Re: SQL Stored Procedure. Tabelle als Parameter möglich ?
 
du kannst dir auch eine lösung mit union, statischen spalten und where bauen.

alzaimar 16. Jan 2006 13:14

Re: SQL Stored Procedure. Tabelle als Parameter möglich ?
 
Also: Erstmal kann man sich in T-SQL (MSSQL Dialekt) einen SQL-Befehl zusammenbasteln und dann mit EXEC aufrufen:
Delphi-Quellcode:
Create Procedure SelectTable @TableName VarChar (80) as
declare @SQLStmt VarChar (255)

set @SQLStmt = 'SELECT TOP 10 * FROM '+@TableName+' WHERE Bla=Fasel ORDER BY Foo DESC'

EXEC (@SQLStmt)
Damit sollte dein Problem gelöst sein.

Andersrum kannst du doch auch einfach das Select-Statement im Client per Delphi zusammenbasteln.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:27 Uhr.

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