Aktualisierung einer Tabelle in einer Gespeicherten Prozedur
Ich versuche zu lernen-Datenbank auf meinem eigenen; alle Ihre Kommentare sind sehr geschätzt.
Ich habe die folgende Tabelle.
CREATE TABLE AccountTable
(
AccountId INT IDENTITY(100,1) PRIMARY KEY,
FirstName NVARCHAR(50) NULL,
LastName NVARCHAR(50) NULL,
Street NVARCHAR(50) NULL,
StateId INT REFERENCES STATETABLE(StateId) NOT NULL
)
Möchte ich eine Gespeicherte Prozedur schreiben, die updates der Reihe. Ich kann mir vorstellen, dass die gespeicherte Prozedur würde wie folgt Aussehen:
CREATE PROCEDURE AccountTable_Update
@Id INT,
@FirstName NVARCHAR(20),
@LastName NVARCHAR(20),
@StreetName NVARCHAR(20),
@StateId INT
AS
BEGIN
UPDATE AccountTable
Set FirstName = @FirstName
Set LastName = @LastName
Set Street = @StreetName
Set StateId = @StateId
WHERE AccountId = @Id
END
den Aufrufer stellt den neuen Informationen, dass er möchte, dass die Zeile zu haben. Ich weiß, dass einige der Felder sind nicht ganz korrekt oder genau; ich Tue dies vor allem für das lernen.
- Ich habe ein syntax-Fehler mit der SET-Befehle in der UPDATE-Teil, und ich weiß nicht, wie es zu lösen ist.
- Ist die gespeicherte Prozedur, die ich Schreibe eine Prozedur, die Sie schreiben würde im realen Leben? Ist das ein antipattern?
- Gibt es irgendeinen schwerwiegenden Fehler, die ich gemacht habe, nur lässt Sie zusammenzucken, wenn Sie Lesen, die über TSQL?
Gut ist, dass du versuchst zu lernen, aber für Dinge wie syntax-Fehler prüfen Sie zuerst die MSDN: msdn.microsoft.com/en-us/library/ms177523.aspx. Auch wenn die BNF-notation kann eine Herausforderung sein, bis Sie sich daran gewöhnt haben, ist ein muss. Als die Dinge werden noch komplizierter, Sie zu greifen, um die Dokumentation mehr und mehr oft.
thx für die Wort der Ermutigung. Ich werde mehr Aufwand auf diese als gut.
thx für die Wort der Ermutigung. Ich werde mehr Aufwand auf diese als gut.
InformationsquelleAutor MedicineMan | 2009-07-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht wirklich "Grab", aber ich bemerkte Ihre Tabelle string-Felder sind als der Datentyp von NVARCHAR(50) noch die gespeicherte Prozedur Parameter sind vom Datentyp NVARCHAR(20). Dieser kann Grund zur Besorgnis sein. In der Regel wird Ihr gespeicherte Prozedur Parameter übereinstimmen wird das entsprechende Feld Datentyp und Präzision.
ah gut zu fangen. Ich habe nicht nachgedacht, bis jetzt
InformationsquelleAutor ckittel
#1: Sie müssen die Kommas zwischen den Spalten:
SET
wird nur einmal aufgerufen, am Anfang derUPDATE
Liste. Jede Spalte nach, die in einer durch Trennzeichen getrennten Liste ein. Überprüfen Sie heraus die MSDN docs.#2: Dies ist nicht ein antipattern, pro se. Vor allem angesichts der Benutzereingaben. Sie möchten parametized Abfragen, wie das zu vermeiden SQL-injection. Wenn Sie zum erstellen der Abfrage als string aus der Benutzer-Eingabe, Sie wäre sehr, sehr anfällig für SQL-injection. Jedoch, durch die Verwendung von Parametern, die Sie umgehen dieses Problem. Die meisten RDBMS ' s stellen Sie sicher, zu bereinigen, die Parameter übergeben, um seine Abfragen automatisch. Es gibt viele Gegner von gespeicherten Prozeduren, aber Sie verwenden es als eine Möglichkeit zu schlagen, SQL-injection, also ist es nicht ein antipattern.
#3: Der einzige grobe Fehler den ich sah, war der
SET
anstelle von Kommas. Auch, als ckittel darauf hingewiesen, Ihre Inkonsistenz in der Länge Ihrernvarchar
Spalten.InformationsquelleAutor Eric