【问题标题】:Concatenate dynamic variables in loop sentence into a SQL Server procedure将循环语句中的动态变量连接到 SQL Server 过程中
【发布时间】:2015-12-27 01:50:17
【问题描述】:

我已经定义了一个计算大量统计数据的过程,假设它的名字是 calc_stat。它的输入是我需要分析的变量的名称。现在,在我的表中,我有 200 个不同的变量,我想将过程 calc_stat 应用于所有变量。很明显,重复 calc_stat 调用 200 次很疯狂,所以我需要一个 Loop。

我找到的解决方案是创建一个新过程,给定我的 200 个变量的 200 个名称和变量数 (200),可以将过程 calc_stat 应用 200 次。

我尝试做这样的事情:

ALTER PROCEDURE procedure
       @variable1 nvarchar, 
       @variable2 nvarchar, 
       @max_index int
BEGIN
     DECLARE @i int
     DECLARE @aux_variable varchar
     SET @i=1

     WHILE @i<=@max_index
       BEGIN
           SET @aux_variable='@variable'+convert(varchar(10),@i) 
           -- this returns the string '@variablei'
           -- do somethig to obtain the name of the variable????
           -- apply procedure to calculate statistics to the @variablei
           SET @Sent=''     
           SELECT   @Sent = 
              'EXEC calc_stat 'value of @aux_variable'
           EXEC(@Sent)
       END
END

在每次迭代中将字符串“variable1”和“variable2”存储在辅助变量@aux_variable 中,我需要定义一个动态变量,其值是每次迭代中@variable1 和@variable2 的输入值。

如果我在没有 while 的情况下直接使用变量 @variable1 和 @variable2 来执行此代码,但如果使用更多变量,我就不能这样做。

这一定很容易,但我找不到任何有关它的信息!

谢谢!

【问题讨论】:

  • 到目前为止你尝试过什么?目标是什么?这段代码没有意义......它将永远运行,因为你的 WHILE 条件永远不会达到,它会在任何循环中设置你 @aux_variable 丢弃以前的结果,它只会将运行索引添加到字符串'@多变的'。确定这不是您想要的...请解释,提供示例数据和预期输出。
  • 目标是执行:
  • EXEC [Lib].[dbo].[procedure] name_of_variable1, name_of_variable2, 2
  • 现在你从我这里得到一个-1(这真的非常罕见......)你所说的“执行”是什么意思?看,我花了很长时间写了很多问题和提示,而你除了说明 EXEC 语法之外什么都不做?
  • 我有一个包含 200 个不同变量的表。我想对所有这些应用相同的处理,但我不想重复代码 200 次。所以,通过这个过程,当然还有 while 循环,我可以给每个变量的每个名称,并将相同的代码应用于每个变量,只写一次。

标签: sql sql-server while-loop concatenation procedure


【解决方案1】:

我终于找到了解决问题的方法。

首先,我定义了一个名为 VARIABLES_LIST 的表,它只有 2 列,其中列出了 200 个变量。所以我有一张像这样的桌子:

ROWN    VARIABLES
1       variable1
2       variable2 
...     ...

然后,我在循环中包含到程序中:

    SELECT @Variable_aux = VARIABLES
    FROM VARIABLES_LIST 
    WHERE ROWN = @i

所以我可以将@variable_aux 与每个@variablei 的值一起使用。不仅如此,我不必在主程序中输入所有变量的名称。

对于有同样问题的人来说很高兴。

干杯!

【讨论】:

    【解决方案2】:

    你的评论让我觉得,它可以这么简单:

    如果您的变量在一个表中,您可以一次设置所有变量。

    只需将其粘贴到一个空的查询窗口中并执行。适应您的需求...

    DECLARE @tbl TABLE (MyVariable VARCHAR(100));
    INSERT INTO @tbl VALUES ('variable1'),('variable2'),('variable3');
    
    SELECT * FROM @tbl;
    
    UPDATE @tbl SET MyVariable=MyVariable + '_SomeTextToAppend';
    
    SELECT * FROM @tbl;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-09
      • 1970-01-01
      • 2019-04-21
      相关资源
      最近更新 更多