2017-08-13 1 views
1

Ich habe eine Master-Tabelle „Reparaturen“ und eine Detailtabelle „RepairDetails“ Ich versuche, ein Verfahren zu schreiben beid Tabellen zu aktualisieren, wenn ich die entsprechenden Parameter aus meiner Anwendung senden. Hier ist meine SQL:Verstehen SQL-Prozedur Fehler nicht

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE [dbo].[UpdateRepair] 
    @RepairID bigint, 
    @TypeID bigint = NULL, 
    @Directions nvarchar(3000) = NULL, 
    @NewDetails NewDetails READONLY 
AS 
BEGIN 
    SET NOCOUNT ON; 
    UPDATE Repairs 
    SET 
     TypeID = ISNULL(@TypeID, TypeID), 
     Directions = ISNULL(@Directions, Directions), 
     LastUpdate = SYSDATETIME() 
    WHERE RepairID = @RepairID; 
    IF @NewDetails IS NOT NULL UpdateRepairDetails; 
END 

wo „NewDetails“ ist ein benutzerdefinierter Tabellentyp und „UpdateRepairDetails“ ist eine andere gespeicherte Prozedur, die @RepairID und @NewDetails als Parameter übernimmt.

Ich habe einen Fehler und eine Frage. Die Fehlermeldung lautet:

Must declare the scalar variable "@NewDetails" 

, die ich nicht verstehe, weil sie definiert ist.

Und meine Frage ist: Werden die Parameter „@RepairID“ und „@NewDetails“ werden automatisch auf die „UpdateRepairDetails“ Prozedur übergeben. Wenn nicht, was ist der richtige Ansatz, um dies zu erreichen?

+0

Es heißt, @ NewDetails ist keine skalare Variable, nicht, dass es nicht definiert ist. Ist 'NewDetails' ein Tabellentyp? – Andomar

+0

@Andomar Der Satz unter dem Code beantwortet Ihre Frage. – SezMe

Antwort

0

Sie können nicht NULL zu einer Tabelle Variablen zuweisen. Daher können Sie nicht überprüfen, ob eine Tabellenvariable NULL ist.

Zweitens: nein. Sie sollten wie folgt anrufen:

EXEC UpdateRepairDetails @RepairID, @NewDetails; 
+1

Um für OP zu klären, wer Probleme hat. Eine Tabelle ist nicht null. Sie müssen prüfen, ob Zeilen vorhanden sind (z. B. falls vorhanden (wählen Sie * aus xxx) ,,,). – SMor

+0

Ich habe dies als Antwort markiert, aber @SMor hat einen nützlichen Kommentar hinzugefügt, der meine Fragen vollständig beantwortet. Danke an beide. – SezMe

+0

@TT. Ich kann das immer noch nicht zur Arbeit bringen. Ich habe die Nullprüfung entfernt und den Code implementiert, aber ich erhalte immer noch dieselbe Fehlermeldung. – SezMe