我有一个像这样的SP有几十个参数:
ALTER PROCEDURE [dbo].[traxs_FileMaint_ProductRecord_Insert]
@param_1 varchar(100) = NULL,
@param_2 varchar(20) = NULL,
/* List goes on */
@param_n tinyint
AS
/* Some irrelevant stuff */
我正在构建另一个使用第一个SP的SP:
ALTER PROCEDURE [dbo].[traxs_WebsiteInterfaceProduct_Save_Complete]
@parameter_1 varchar(100),
@parameter_2 varchar(50),
/* List goes on */
@parameter_n, tinyint
AS
EXEC traxs_FileMaint_ProductRecord_Insert
SELECT
@param_1 = @parameter_1,
@param_2 = S.product,
@param_3 = S.id,
/* List goes on */
@param_n = @parameter_7
FROM
TOP 1 traxs_temp..__website_interface_selected S
WHERE S.selected = 1
我知道在这些变量中我可以DECLARE
来自SELECT
语句的变量和库存值,但我确实有很多参数,我认为最好直接使用{{1如果可能的话。
如示例中所述,SELECT
的某些参数将从EXEC
语句发出,有些参数将是父SP的参数。
我希望这是有道理的。
答案 0 :(得分:1)
这个怎么样。
DECLARE @sql NVARCHAR(max)
SELECT @sql = 'EXEC traxs_FileMaint_ProductRecord_Insert '
+ '@parameter_1,' + S.product + ',' + S.id
FROM tablename S
WHERE S.selected = 1
EXEC Sp_executesql @sql
注意:应该只选择其中一行,否则将考虑最后一行,如果Id
是数字类型,那么您可能需要转换它
示例:
CREATE PROCEDURE [dbo].[Newp] (@a VARCHAR(50))
AS
BEGIN
SELECT 1
END
GO
DECLARE @a VARCHAR(50)
DECLARE @sql NVARCHAR(max)
SELECT @sql = 'exec newp' + a from (select 'a' a) sub
EXEC Sp_executesql
@sql