【问题标题】:TSQL - Passing fields from table into stored procedure then storing result in temp tableTSQL - 将字段从表传递到存储过程,然后将结果存储在临时表中
【发布时间】:2012-08-28 16:49:01
【问题描述】:

我正在与一个客户合作,他的存储过程包含大约十几个参数。

我需要从数据库中的表中获取参数值,然后将它们输入到存储过程中以获取数字值。然后我需要将此值加入到 SELECT 语句中。

我知道我必须构建一个临时表才能将 SP 结果与我的 select 语句连接起来,但这对我来说是全新的,可以使用一些帮助。主要关注如何将字段值输入 SP。我还希望 Temp 表包含几个作为字段的参数,以便我可以将其加入到我的 select 语句中。

感谢所有帮助。

谢谢

【问题讨论】:

    标签: tsql stored-procedures temp-tables


    【解决方案1】:

    您可以在声明的变量中捕获参数值。比如:

    DECLARE @Parm1 int, @Parm2 varchar(50) -- Use appropriate names and datatypes
    
    SELECT @Parm1 = Parm1ColumnName, @Parm2=Parm2ColumnName
    FROM TableWithParmValues
    -- Include a WHERE condition if appropriate
    
    DECLARE @ProcOutput TABLE(outputvalue int) -- use appropriate names and datatypes to match output
    
    INSERT @ProcOuptut
    EXECUTE MyProc @ProcParm1 = @Parm1, @ProcParm2 = @Parm2 -- Use appropriate names
    

    然后使用 @ProcOutput 临时表,并根据需要使用 SELECT 参数变量。

    【讨论】:

    • 这太棒了。我是否必须执行某种循环来遍历每组列值,还是这段代码已经这样做了?
    • INSERT/EXECUTE 将获取所有行(来自第一个结果集)并将它们放入@ProcOutput,因此您不需要循环。如果您需要使用多组参数多次调用您的存储过程,那么您将需要一个循环。
    【解决方案2】:

    这是一个更好地格式化为答案的评论。

    您无需创建临时表或表变量即可将数值结果与其他数据连接起来。下面演示了使用SELECTs 而不显式创建任何表的各种好奇心:

    declare @Footy as VarChar(16) = 'soccer'
    select * from (
      select 'a' as Thing, 42 as Thingosity
      union all
      select *
        from ( values ( 'b', 2 ), ( 'c', 3 ), ( @Footy, Len( @Footy ) ) ) as Placeholder ( Thing, Thingosity )
      ) as Ethel cross join
      ( select 42 as TheAnswer ) as Fred
    

    【讨论】:

      猜你喜欢
      • 2020-01-26
      • 1970-01-01
      • 2018-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-05
      • 1970-01-01
      相关资源
      最近更新 更多