我有两个SQL脚本:脚本A和B.脚本A检索信息并使用sp_executesql
命令调用存储过程(脚本B)。我能成功地做到这一点。
但是,现在我想将脚本A中的值传递给脚本B.我无法完成此操作。 @nID
是我想传递的参数。我使用此链接作为参考https://msdn.microsoft.com/en-IN/library/ms188001.aspx
我的脚本已附加。为简单起见,我只是将参数值设为5.那么如何将一个'5'从一个脚本传递到另一个脚本呢?谢谢你的帮助。
脚本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
脚本B
ALTER PROCEDURE [dbo].[WMCM]
AS
BEGIN
SET nocount ON;
declare @numID nvarchar(50)
insert into tester(numid)
values(@numID)
END
答案 0 :(得分:1)
存储过程B需要输入参数
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
这是您正在尝试实现的工作模板。
--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
答案 1 :(得分:1)
我把存储过程愚蠢到只显示并返回。
但这可以做你想要的:
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