Wenn dies Ihr erster Besuch hier ist,
lesen Sie bitte zuerst die Hilfe - Häufig gestellte Fragen
durch. Sie müssen sich vermutlich registrieren,
bevor Sie Beiträge verfassen können. Klicken Sie oben auf 'Registrieren', um den Registrierungsprozess zu
starten. Sie können auch jetzt schon Beiträge lesen. Suchen Sie sich einfach das Forum aus, das Sie am meisten
interessiert.
Hi Markus,
<br>
<br>"wer kennt sich mit stored pro befehle für ms sql aus? "
<br>das ist doch sicher nicht die Frage, die dich veranlast hat diese Diskusion zu öffnen, Oder? ;-)
<br>
<br>Wo liegt denn das Problem?
<br>
<br>Hi Andreas,
<br>"Zudem kennst MS-SQL wohl keine InterBase oder Oracle vergleichbaren Stored Procs sonder man bindet C-Module (oder auch VB) ein. "
<br>Das verstehe ich nicht. Unter "Stored Procs" verstehe ich gespeicherte Prozeduren, und die haben doch zunächst mal nichts mit C oder VB zu tuen, da man diese doch in T-SQL implementiert (und das Schema ist bei vielen DB Servern ziemlich gleich (create Proc ... Bla...fertig)).
MS SQL Hilfe suchen nach "Gespeicherte Prozeduren, Programmieren"
<br>
<br>mfg
<br>P
ich programmiere heute zum ersten mal eine stored proc und mir ist nicht klar, welche befehle darf ich verwenden, welche nicht usw.! deswegen ist das schon irgendwie meine frage! ich will mir möglichst schnell einen überblick verschaffen!!
das folgende Beispiel für eine Stored Procedure für den Microsoft SQL Server 7/2000 bucht einen Geldbetrag von einem Konto auf das andere. Je nach vorgefundener Situation muss sich die SP unterschiedlich verhalten:
<pre>
CREATE PROCEDURE TransferMoney
@iFromKontoNr INT, @iToKontoNr INT, @mValue MONEY, @iStatus INT OUTPUT
AS
DECLARE @iError INT
DECLARE @iRowCount INT
SET @iStatus = 0
-- Schritt 1: Transaktion starten
BEGIN TRANSACTION
-- Schritt 2: Konto des Absenders belasten
UPDATE Konto
SET Betrag = Betrag - @mValue
WHERE KontoNr = @iFromKontoNr
SELECT @iError = @@ERROR, @iRowCount = @@ROWCOUNT
-- Schritt 3: Prüfen, ob Schritt 2 erfolgreich war
IF @iRowCount = 0
-- Status 1 = Konto des Absenders wurde nicht aktualisiert
SELECT @iStatus = 1
-- Zweiten Teilschritt nur im Erfolgsfall starten
IF (@iERROR = 0) AND (@iRowCount = 1)
BEGIN
-- Schritt 4: Konto des Empfängers gutschreiben
UPDATE Konto
SET Betrag = Betrag + @mValue
WHERE KontoNr = @iToKontoNr
SELECT @iError = @@ERROR, @iRowCount = @@ROWCOUNT
IF @iRowCount = 0
-- Status 2 = Konto des Empfängers wurde nicht aktualisiert
SELECT @iStatus = 2
END
-- Schritt 5: Transaktion im Fehlerfall widerrufen
IF (@iError = 0) AND (@iStatus = 0)
COMMIT TRANSACTION
ELSE
ROLLBACK TRANSACTION
-- Fehlernummer zurückliefern
RETURN(@iError)
</pre>
Wenn man die Stored Procedure angelegt hat, kann man diese auch gleich im Query Analyzer testen, indem man dort einen Stapel von SQL-Anweisungen ausführen lässt. Das könnte zum Beispiel so aussehen:
<pre>
DECLARE @iResult INT
DECLARE @iStatus INT
EXEC @iResult = TransferMoney 1,22,12.50,@iStatus OUTPUT
SELECT @iResult,@iStatus
</pre>
Nachdem man die Variablen für den Rückgabewert der Stored Procedure sowie den OUTPUT-Parameter deklariert hat, wird die SP über EXEC aufgerufen. Die anschliessende SELECT-Anweisung gibt den Inhalt der beiden Variablen aus. Der MS SQL Server stellt für Stored Procedures einen eigenen Debugger zur Verfügung, so dass man Zeile für Zeile durch die SP debuggen kann, um sich den Inhalt der Variablen etc. anzuschauen. Wenn sich die SP im Query Analyzer korrekt verhält, macht man im eigenen Programm weiter, um die SP von dort aus aufzurufen.
Innerhalb der SP darf man alle Befehle aus T-SQL einsetzen. Da in T-SQL auch ein Anbindung an Betriebssystembefehle und COM-Objekte unterstützt wird, kann man in einer SP fast alles machen.
Weitere Beispiele für den Einstatz von SPs und dem Aufruf aus dem eigenen Delphi-Programm über ADO sind in meinem Buch <i>COM/DCOM/COM+ mit Delphi</i> im Kapitel 16 zu finden
die Version 7 ist ja eigentlich eine Version 1.0, denn Microsoft hat den alten, von Sybase stammenden SQL Server 6.5 in die Mülltonne gehauen (das war die Story, als Bill Gates die Top 100 der Datenbankbranche mit dem Scheckbuch eingekauft hat, damit diese parallel zum alten 6.x-Server einen völlig neuen entwickeln). Erst ab der Version 7 ist der MS SQL eine <i>richtige SQL-Datenbank</i>, daher habe ich mich auch erst ab der Version 7 mit diesem Teil näher beschäftigt. Und den Vorsprung hat die Truppe mit der Version 2000 (also die eigentliche Version 2.0) nochmals kräftig ausgebaut.
@Markus
Die Online-Hilfe ist ausgezeichnet, auch wenn so viel drinn steht, dass man am Anfang leicht die Übersicht verliert. Eine Eigenheit des MS SQL Server liegt darin, dass man mit SELECT auch den Inhalt von Variablen setzen kann (Alternativ zu SET).
Mit AS kann man einer Spalte der Ergebnismenge ein neue Bezeichnung als Spaltenüberschrift verpassen.


Comment