来自SELECT的EXEC参数

时间:2014-12-29 17:29:50

标签: sql-server select exec

我有一个像这样的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的参数。

我希望这是有道理的。

1 个答案:

答案 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