将循环语句中的动态变量连接到SQL Server过程

时间:2015-09-29 14:18:51

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

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

我找到的解决方案是创建一个新程序,给定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

拥有字符串&#34; variable1&#34;和&#34;变量2&#34;在每次迭代中存储在辅助变量@aux_variable中,我需要定义一个动态变量,其值是每次迭代中@ variable1和@ variable2的输入值。

如果我不使用while并且直接使用变量@ variable1和@ variable2,这段代码可以正常工作,但是如果有更多变量,我就无法做到。

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

谢谢!

2 个答案:

答案 0 :(得分:0)

你的评论让我想到,它可以像那样简单:

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

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

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;

答案 1 :(得分:0)

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

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

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

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

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

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

对于遇到同样问题的人来说,这很有用。

干杯!