2016-12-13 6 views
0

Ich habe zwei SQL-Skripts: Skript A und B. Skript A ruft Informationen ab und verwendet den sp_executesql-Befehl zum Aufrufen der gespeicherten Prozedur (Skript B). Das kann ich erfolgreich erreichen.SQL-Pass-Parameter von einem gespeicherten Prozess zu einem anderen

Allerdings möchte ich jetzt einen Wert von Skript A zu Skript B übergeben. Ich bin nicht in der Lage, dies zu erreichen. @nID ist der Parameter, den ich weitergeben möchte. Ich verwende diesen Link als Referenz https://msdn.microsoft.com/en-IN/library/ms188001.aspx

Meine Skripte sind beigefügt. Der Einfachheit halber habe ich meinen Parameterwert gleich 5 gesetzt. Wie übertrage ich also eine "5" von einem Skript zum anderen? Danke für jede Hilfe.

Script A

 BEGIN 



SET NOCOUNT ON; 
    DECLARE @sp nVARCHAR(25) 
    DECLARE @nID nvarchar(25) 
    DECLARE @busID nvarchar(25) 
    DECLARE @ParmDefinition nvarchar(500) 
    SET @ParmDefinition = N'@nID nvarchar(50) output '; 

    set @sp = 'WMCOMM'; 
    set @busID = 5 
    execute sp_executesql @sp, @ParmDefinition, @nID = @busID; 
     END 

Script B

ALTER PROCEDURE [dbo].[WMCM] 


AS 
BEGIN 

    SET nocount ON; 
    declare @numID nvarchar(50) 
    insert into tester(numid) 
    values(@numID) 
END 

Antwort

1

Stored Procedure B erfordert einen Eingabeparameter

ALTER PROCEDURE [dbo].[WMCM] 
@nID nvarchar(25) --DECLARE PARAMETER HERE THEN YOU CAN USE IT IN THE SP 
AS 
BEGIN 

    SET nocount ON; 
    declare @numID nvarchar(50) 
    insert into tester(numid) 
    values(@numID) 
END 

Hier ist eine Arbeitsvorlage von dem, was Sie zu acheive versuchen.

--RUN ME FIRST 
CREATE procedure dbo.B 
@nID AS NVARCHAR(5) 
AS 
SELECT @nID 

GO 

--RUN ME SECOND 

CREATE procedure dbo.A 
AS 

DECLARE @nID NVARCHAR(50) = 'abc' 
DECLARE @sp NVARCHAR(50) = 'EXECUTE dbo.B @nID' 

EXECUTE sp_executesql @sp,N'@nID NVARCHAR(50)',@nID = @nID; 

GO 

--RUN ME THIRD 
EXEC dbo.a 
+0

ich das geändert, und es scheint zu passieren, um zu versuchen, leider jetzt Script A ist ein Fehler, die besagt, WMCM sp erhalten wird, einen Parameter @nID erwartet, die nicht geliefert wurde . Irgendwelche Ideen? – arios

+0

Das sp_execute in Prozedur A muss geändert werden, um den Wert zu übergeben. – pacreely

+0

in der Tat .... Wie man das ändert, so dass es es richtig eingibt? Ich versuche jeden Weg und bekomme immer noch den gleichen Fehler. – arios

1

Ich dumpfer die gespeicherte Prozedur, um nur anzuzeigen und zurückzukehren.

Aber das tut, was Sie wollen:

alter PROCEDURE [dbo].[WMCM] 
@nID nvarchar(25) --DECLARE PARAMETER HERE THEN YOU CAN USE IT IN THE SP 
, @InAndOutValue nvarchar(50) OUTPUT 

AS 
BEGIN 

    SET nocount ON; 


    Select '[dbo].[WMCM] has access to :' as ProcName , @nID as TheId 

    Select '[dbo].[WMCM] can use same variable as input and output. InValue :' as ProcName , @InAndOutValue as TheId 

    select @InAndOutValue= 'NowImAnOutValue' 

END 



GO 





DECLARE @SQL_String NVARCHAR(max) 
DECLARE @Parameter_Definition NVARCHAR(max) 

SET @SQL_String = N' 
    EXEC [dbo].[WMCM] @nID = @nID_input, @InAndOutValue = @InAndOutValue_out OUTPUT 
' 

SET @Parameter_Definition = N' 
    @nID_input nvarchar(25), 
    @InAndOutValue_out nvarchar(50) OUTPUT' 

DECLARE @nID nvarchar(25) 
DECLARE @InAndOutValue nvarchar(50) 

SET @nID = '5' 

SET @InAndOutValue = 'InAndOutVariable_JustInValue' 

EXECUTE sp_executesql @SQL_String, @Parameter_Definition, @nID_input = @nID, @InAndOutValue_out = @InAndOutValue OUTPUT 

SELECT @InAndOutValue as IGotTheInAndOutValue 
+1

Sie könnten nur den @InAndOutValue verwenden, aber ich möchte Bedenken trennen. Und habe meine Eingabevariablen und dann meine Ausgabevariablen. Aber das gibt dir die Idee. – granadaCoder

Verwandte Themen