Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MSSQL Server: Datensätze durchgehen??? (https://www.delphipraxis.net/52108-mssql-server-datensaetze-durchgehen.html)

romber 23. Aug 2005 23:59

Datenbank: MSSQL Server • Version: 2000 • Zugriff über: ADO

MSSQL Server: Datensätze durchgehen???
 
Hallo!

brauche eine Stored Procedure, die in Schleife alle Datensätze einer Tabelle durchläuft und die Werte einer bestimmten Spalte ausliest. Ich möchte während der Schleife die Werte prüfen. Wie könnte so was aussehen?

Danke!

jensw_2000 24. Aug 2005 00:32

Re: MSSQL Server: Datensätze durchgehen???
 
Relativ einfach wäre es, wenn du ..
das
Zitat:

Tabelle durchläuft und die Werte einer bestimmten Spalte
und das
Zitat:

Werte prüfen
etwas genauer angeben könntest.
z.B. Tabellenname, relevante Felder und deren Typen, Was soll passieren wenn das Feld eine Bedingung nicht erfüllt (Ausgabe, Löschen, Bearbeiten )???

Ich mache jetzt mal einen Schuss in Blaue. Wahrscheinlich ist es nicht das was du suchst ...

SQL-Code:
CREATE PROCEDURE dbo.Get_Checked_Usernames
AS
BEGIN
  -- ich definiere man, das ein User Vor- und Nachname hat, sonst ist der Datensatz ungültig..
 
 
  SELECT S.Vorname
         ,S.Nachname
  FROM   SYS_Agents S
  WHERE  S.Vorname IS NOT NULL
          AND
          S.Vorname <>''
          AND
          S.Nachname IS NOT NULL
          AND
          S.Nachname <>''
END
oder mit berechneter Spalte (z.B. incomplete)
SQL-Code:
CREATE PROCEDURE dbo.Get_Usernames
AS
BEGIN
  -- ich definiere man, das ein User Vor- und Nachname hat, sonst ist der Datensatz ungültig..
 
 
  SELECT S.Vorname
         ,S.Nachname
         ,CASE WHEN S.Vorname IS NULL
                    OR
                    S.Nachname IS NULL
                    OR
                    S.Vorname = ''
                    OR
                    S.Nachname = ''
               THEN 1
               ELSE 0 
          END AS [Incomplete]
  FROM   SYS_Agents S

END

Um eine Datenmenge datensatzweise mit SQL zu durchlaufen, um dann wärend des Durchlaufs mit jedem einzelnen Datensatz etwas anzustellen brauchst du einen Cursor (s. MSDN)

:hi:

romber 24. Aug 2005 00:43

Re: MSSQL Server: Datensätze durchgehen???
 
Hallo Jens :hi:

Diese Frage bezieht sich dein Tipp hier: http://www.delphipraxis.net/internal...ct.php?t=61747

Ich habe es gemacht und es funktioniert. Ich würde aber ab und zu eine SP laufen lassen, die "tote Logins" aus der Tabelle SYS_ActiveUser entfernt.

jensw_2000 24. Aug 2005 01:13

Re: MSSQL Server: Datensätze durchgehen???
 
Dafür brauchst du keine 2. SP.

Füge einfach vor dem letzten END folgenden Befehl ein

SQL-Code:
DELETE FROM SYS_ActiveUsers
WHERE ABS( DATEDIFF( SECOND,LAST_SEEN,GETDATE() ) ) > 7200
Dann löscht die SP selbst (bei jedem Login-Versuch, Logout, KeepAlive) alle Datensätze aus SYS_ActiveUsers, die seit mehr als 2 Stunden nicht mehr aktualisiert wurden.

Ist aber eigentlich nur für die Ordnung in der Tabelle...
Funktionell haben die Datensätze der "abgestürzten" User keinen Nachteil (insofern es keine 1000000 User gibt).

:hi:

romber 24. Aug 2005 01:57

Re: MSSQL Server: Datensätze durchgehen???
 
Zitat:

Zitat von jensw_2000
Füge einfach vor dem letzten END folgenden Befehl ein

Bekomme die Fehlermeldung Incorrect syntax near 'AU' Was ist den dieses AU?

marabu 24. Aug 2005 06:37

Re: MSSQL Server: Datensätze durchgehen???
 
Hallo romber,

einfach weg mit dem Alias AU. So nützlich er in der FROM-Klausel eines SELECT ist - beim DELETE braucht man ihn nicht und von der Syntax her ist er auch nicht zugelassen.

Was mich bei deinen threads zu diesem Thema etwas irritiert: jensw und jelly u.a. haben sich ganz schön ins Zeug gelegt um ein technisches Problem zu lösen, für das ich die "fachliche Anforderung" nicht erkennen kann. Habe ich da etwas überlesen?

Grüße vom marabu

jensw_2000 24. Aug 2005 07:58

Re: MSSQL Server: Datensätze durchgehen???
 
Zitat:

Bekomme die Fehlermeldung Incorrect syntax near 'AU'
Habe ich im o.A. Befehl korrigiert. Habe nicht bedacht, das Aliasnamen nur im SELECT unterstützt werden.

Zitat:

Was ist den dieses AU?
Wie gesagt, es ist (war) win Aliasname für die Tabelle SYS_ActiveUsers ...

Kleines Beispiel, wie Aliasnamen Tipparbeit sparen und den Code übersichtlicher machen ...

Eine einfache Abfrage über 2 gejointe Tabellen

SQL-Code:
SELECT TOP 100 PERCENT
       dbo.Mitarbeiter.Vorname
      ,dbo.Mitarbeiter.Nachname
      ,dbo.Aufgaben.Termin
      ,dbo.Aufgaben.Bezeichnung
FROM  dbo.Aufgaben
INNER JOIN
  dbo.Mitarbeiter
  on dbo.Mitarbeiter.ID = dbo.Aufgaben.ID_Mitarbeiter
ORDER BY
  dbo.Mitarbeiter.Vorname
 ,dbo.Mitarbeiter.Nachname
 ,dbo.Aufgaben.Termin
Wenn der JOIN 10 Tabellen einschließt und im SELECT 30 Felder Ausgewählt werden, dann kann man den SQL Code vor lauter dbo.irgendwas nur noch schwehr lesen.


Mit Aliasnamen sieht die Abfrage viel übersichtlicher aus.
Definiert wird der Aliasname (A bzw. M) hinter dem Tabellennamen in der FROM bzw. JOIN Klausel

SQL-Code:
SELECT TOP 100 PERCENT
       M.Vorname
      ,M.Nachname
      ,A.Termin
      ,A.Bezeichnung
FROM  dbo.Aufgaben A
INNER JOIN
  dbo.Mitarbeiter M
  on M.ID = A.ID_Mitarbeiter
ORDER BY
  M.Vorname
 ,M.Nachname
 ,A.Termin

romber 24. Aug 2005 09:39

Re: MSSQL Server: Datensätze durchgehen???
 
Danke, probiere ich gleich aus!


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:43 Uhr.

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