T-SQL Stored Prtozedure zur Datensatz Zählung

Hallo Leute,

ich habe eine SP geschrieben die in Abhängigkeit von zwei übergebenen Werten die Anzahl der Datensätrze ausgeben soll.

CREATE PROCEDURE SP\_Login(@login\_name varchar(10), @login\_pw varchar(10), @Anzahl integer)

SELECT count(\*) AS Anzahl
FROM TW\_login
WHERE login\_name = @login\_name AND login\_pw = @login\_pw

GO

wenn ich die im Querry Analyzer laufen lasse meckert der Server das er keine eingabe des @login_pw bekommt (Nachricht Nr. 201).
Hier der Aufruf der SP den ich zum Testen verwende.

EXECUTE SP\_Login(hdjlange, Napoleon)

Witzig ist aber wenn ich die gleiche SP über ADO.NET aus WebMatrix heraus aufrufe bekomme ich die Fehlermeldung das

Der Formale @Anzahl-Parameter wurde als OUTPUT definiert, der tatsächliche Parameter jedoch nicht als OUTPUT deklariert.

Meine Fragen diesbezüglich sind diese:

  • Wie muss ich die Werte im Quarry Analyser übergeben um keine Fehlermeldung zu erhalten?

  • Wie kann ich den tatsächlichen Parameter @Anzahl als OUTPUT deklarieren?

Über eure Hilfe würde ich mich sehr freuen, Euer

hdj-lange

Also, die Stored Procedure mit dem Prefix ‚SP_‘ zu versehen ist schon mal keine gute Idee. Denn dieser Prefix wird vom SQL-Server intern benutzt und weist ihn an, erst mal das System-Dictionary zu durchsuchen, wo er deine SP nicht finden wird.

Bin mir über den Syntax nicht ganz sicher, hab hier nichts zur Hand:

CREATE PROCEDURE SP\_Login(
@loginname varchar(10),
@login\_pw varchar(10),
@Anzahl int output)
AS
SELECT count(\*) AS Anzahl
FROM TW\_login
WHERE login\_name = @login\_name AND login\_pw = @login\_pw
@Anzahl = Anzahl

In ADO.NET muss das Parameter-Objekt korrekt initialisiert werden

(C#)

system.data.sqlClient.sqlParam Param = new (...)
Param.Direction = system.data.paramdirection = (...) ReturnValue

Pardon für die Syntax-Lücken; wie gesagt, kein Compiler hier…

Übrigens: Ist es wirklich notwendig auch das Passwort zu übergeben ? Die Benutzer sollten ja eindeutig sein (Security)…

Hallo

vielen Dank für den Tipp, ich war scheinbar schon das was mann allgemein als Betriebsblind bezeichnet.

meine gespeicherte Prozedur sieht nun so aus:

CREATE PROCEDURE Login(
@loginname varchar(10),
@login\_pw varchar(10))
AS
SELECT count(\*) AS Anzahl
FROM TW\_login
WHERE login\_name = @login\_name AND login\_pw = @login\_pw
GO

Übrigens: Ist es wirklich notwendig auch das Passwort zu

übergeben ? Die Benutzer sollten ja eindeutig sein
(Security)…

SI SI es ist nötig, es soll ja eine Loginfunktion sein die gegen eine Datenbank gefahren wird.

Mit freundlichem Gruß

hdj-lange