Speichern Sie das Ergebnis von einer gespeicherten Prozedur, ohne über ein output-parameter
Ich habe 2 gespeicherte Prozeduren: up_proc1 und up_proc2.
Dies ist (eine vereinfachte version) up_proc2:
CREATE PROCEDURE dbo.up_proc2
@id_campaign uniqueidentifier, @id_subcampaign uniqueidentifier,
@id_lead uniqueidentifier, @offer NVARCHAR(1000) = NULL
AS
SET NOCOUNT ON
DECLARE @id UNIQUEIDENTIFIER
SELECT @id = id FROM prospects WHERE id_lead = @id_lead
AND id_campaign = @id_campaign AND id_subcampaign = @id_subcampaign
IF @id IS NULL
BEGIN
SET @id = newid ()
INSERT INTO prospects (id, id_campaign, id_subcampaign, id_lead, offer)
values (@id, @id_campaign, @id_subcampaign, @id_lead, @offer)
END
ELSE
BEGIN
UPDATE prospects set offer = @offer WHERE id=@id
END
SELECT @id AS ID
GO
Vom up_proc1 ich nenne up_proc2. Was ich erreichen möchte ist das speichern von @id up_proc2 in eine variable deklariert, in up_proc1. Ist dies möglich, ohne über ein output-parameter?
Dies ist, wie up_proc1 aussieht:
CREATE PROCEDURE dbo.up_proc1
AS
SET NOCOUNT ON
DECLARE @fromProc2 UNIQUEIDENTIFIER
-- NOT WORKING
-- select @fromProc2 = exec up_insertProspects [snip]
-- ALSO NOT WORKING
-- exec @fromProc2 = up_insertProspects [snip]
- Warum wollen Sie es vermeiden, einen output-parameter? Das ist genau das, was Sie sind für.
- Ich bin nicht sehr erfahren mit sql. up_proc2 ist eine vorhandene gespeicherte Prozedur. Ich bin mir nicht sicher, ob das hinzufügen einer Ausgabe-parameter wird nicht brechen jede vorhandene Funktionalität? up_proc2 auch genannt wird, wird von C# - code. Muss ich hinzufügen, dass die output-parameter zur Liste der Parameter beim aufrufen der gespeicherten Prozedur von C#? Wenn nicht, dann könnte ich wahrscheinlich verwenden in der Tat ein output-parameter.
- Ja, Sie können eine null-output-parameter und C# nicht bemerken (obwohl Sie sollten ändern Sie Ihre C# - code zu verwenden, wenn Sie nur abrufen einer einzelnen skalaren Wert). Bitte siehe meine Antwort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie tun können, speichern Sie die Ausgabe in eine Tabelle variable:
und dann gehen von dort aus und verwenden Sie diese Tabelle variable später auf.
#temp
Tisch, und scheitern mit einem@table
variable. Es ist ein Unterschied. Es ist meist hilfreich, wenn Sie angeben, Ihre version vorne, dann haben wir nicht zu spekulieren und sich Fragen, was Sie unterstützen kann und was Sie nicht können.DECLARE @tmpTable TABLE (ID UNIQUEIDENTIFIER) insert into @tmpTable exec up_insertActivity ...
scheint gut zu funktionieren. Dieser thread zeigt einen Fehler auf 2000, richtig?Können Sie sicher verbrauchen diese als output-parameter im proc2, ohne, wie Sie Ihre C# - code ruft die eventuelle resultset.
C# ignorieren können Sie den neuen parameter, da es null-Werte zulässt (aber da eine single-output-parameter ist effizienter als ein Daten-Leser, können Sie aktualisieren Sie Ihre C# - code, um die Vorteile der output-parameter weiter unten).
Nun in proc1: