代码之家  ›  专栏  ›  技术社区  ›  aggicd

SQL Server 2012:在临时表中插入静态值、存储过程结果和计算值

  •  1
  • aggicd  · 技术社区  · 6 年前

    我有多个 stored procedures 它返回一个值。我想再创造一个 stored procedure 它将运行所有现有的 SPs 并将返回值存储在 temp table :

    CREATE TABLE #temptbl(metricid int, value float, normalizedvalue int) 
    

    其中 metricid 将是静态的,例如 SP_CalcMetric1 将是1等。

    value 将是每个 SP

    normalizedvalue 将是每个 服务提供商 ,它将被规范化,例如 计算方法1

    if (value < 5)
         normalizedvalue = 100;
    else if (value >= 5 && value < 10)
         normalizedvalue = 50;
    else
         normalizedvalue = 0;
    

    每个 服务提供商 结果有不同的规范化方法。

    问题是我怎样才能写出 insert statement 要组合静态int、存储过程的值和规范化值(从normalize方法计算)

    2 回复  |  直到 6 年前
        1
  •  1
  •   M.Ali    6 年前

    您可以使用OPENQUERY操作sp调用返回的值,并将每个sp的结果分别插入到同一个表中,例如。。。

    CREATE TABLE #temptbl(metricid int, value float, normalizedvalue int);
    
    INSERT INTO #temptbl(metricid , value  , normalizedvalue )
    SELECT  1 
          , value
          ,  CASE 
                WHEN value < 5 
                    THEN 100
                WHEN value >= 5 AND value < 10
                    THEN 50
                ELSE 0
            END
    FROM OPENQUERY(YOURSERVERNAME, 'EXEC SP_CalcMetric1')
    
    UNION ALL 
    
    SELECT  2 
          , value
          ,  CASE    --<-- Some other logic here as you mentioned it could be different
                WHEN value < 5     
                    THEN 100
                WHEN value >= 5 AND value < 10
                    THEN 50
                ELSE 0
            END
    FROM OPENQUERY(YOURSERVERNAME, 'EXEC SP_CalcMetric2')
    .
    .
    . add more union all if you need to. 
    
        2
  •  0
  •   Brian    6 年前

    我会改变每一个 CalcMetric 返回三个值的过程:

    MetricID
    Value
    NormalizedValue  (this can be encapsulated in a scalar-value function)
    

    (并在评论中将其重命名为Jeroen Mostert)

    然后将存储过程的结果插入