Próbuję nauczyć się korzystać z operatora MERGE. Poniższy kod kompiluje poprawnie:Jak debugować scalanie w SQL Server?
ALTER PROCEDURE moto.procPM_UpdateLines
@LineId As Int = null,
@LineName As Varchar(100),
@DeleteMe As Bit = 0
AS
BEGIN
MERGE moto.tblPMLine AS line
USING (SELECT LineId, LineName FROM moto.tblPMLine) AS existsLine
ON line.LineId = existsLine.LineId
WHEN MATCHED AND @DeleteMe = 1 THEN DELETE
WHEN MATCHED AND @DeleteMe = 0 THEN UPDATE SET line.LineName = @LineName
WHEN NOT MATCHED THEN INSERT(LineName) VALUES(@LineName);
END
GO
Jest to bardzo prosta procedura, wiem, ale z jakiegoś powodu nie wydaje się, aby wygenerować żadnych wpisów kiedy użyć następującego polecenia.
Czy jest dla mnie sposób, aby wiedzieć, która z opcji jest podążająca, jeśli w ogóle?
Usunięto poprzednią procedurę przechowywaną.
MERGE INTO moto.tblPMLine AS T
USING (SELECT @LineId as LineId, @LineName as LineName) AS S
ON T.LineId = S.LineId
WHEN MATCHED AND @DeleteMe = 0 THEN --UPDATE
UPDATE SET LineName = @LineName
WHEN MATCHED AND @DeleteMe = 1 THEN --DELETE
DELETE
WHEN NOT MATCHED THEN--INSERT
INSERT (LineName) VALUES (@LineName)
OUTPUT $action AS ChangesMade;
Teraz wstawia, aktualizuje i usuwa, a także zwraca dane wyjściowe.
Czy moja odpowiedź nie sugeruje, że nie użyłeś zmiennej '@ LineID'? :) – shahkalpesh
Tak, przepraszam. –