Ich versuche, eine gespeicherte Prozedur zu schreiben, die einen Einzahlungsdatensatz für eine bestimmte Person, die Anzahl der Einzahlungen für diese Person und die Zeilennummer der Einzahlung für diese Person zurückgibt. Der Parameter @personID
liefert immer die richtige personID; @SpecificRow
ist jedoch entweder 0 (bedeutet: die letzte Einzahlung zurückgeben) oder eine Zeilennummer (bedeutet: Datensatz in dieser bestimmten Zeile zurückgeben).SQL Server Stored Procedure Syntaxfehler
Script:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [schema].[procedure]
@personID varchar(5),
@SpecificRow int,
@RowNumber INT OUTPUT,
@RowCount INT OUTPUT
AS
BEGIN
IF OBJECT_ID('#TempSortedDeposits') IS NOT NULL
DROP Table #TempSortedDeposits
-- get all deposits with record number into temp file for specific personID
SELECT
ROW_NUMBER() OVER (ORDER BY Date ASC) AS RecordNo, *
INTO
#TempSortedDeposits
FROM
persons.Deposits
WHERE
personID = @personID
-- get record count in file
SELECT @RowCount = COUNT(personID)
FROM persons.Deposits
WHERE personID = @personID
IF @SpecificRow = 0 --get most recent record
SET @RowNumber = @RowCount;
ELSE
--get record by rownumber
SET @RowNumber = @SpecificRow;
SELECT *
FROM #TempSortedDeposits
WHERE RecordNo = @RowNumber
END
Wenn ich die Anweisung alter versuchen laufen, bekomme ich folgende Fehlermeldung:
Msg 102, Level 15, State 1, Procedure procedure, Line 33 [Batch Start Line 9]
Incorrect syntax near ''.
Einsicht?
Danke.
prüfen, was an den Parameter @personID übergeben wurde? –
@FullMoonFisher Dies sollte keinen Fehler bei der Kompilierung verursachen, nur Ausführung. – scsimon