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

将循环语句中的动态变量连接到SQL Server过程中,sql,sql-server,while-loop,concatenation,procedure,Sql,Sql Server,While Loop,Concatenation,Procedure,我定义了一个计算大量统计数据的过程,假设它的名字是calc_stat,它的输入是我需要分析的变量的名字。现在,在我的表中,我有200个不同的变量,我想将过程calc_stat应用于所有这些变量。很明显,重复calc_stat调用200次太疯狂了,所以我需要一个循环 我找到的解决方案是创建一个新的过程,给定我的200个变量的200个名称和变量的数量(200),这个过程可以应用calc_stat 200次 我尝试这样做: ALTER PROCEDURE procedure @varia

我定义了一个计算大量统计数据的过程,假设它的名字是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
ALTER过程
@可变1 nvarchar,
@变量2 nvarchar,
@最大索引整数
开始
声明@i int
声明@aux_变量varchar
设置@i=1

虽然@i你的评论让我觉得,事情可能就这么简单:

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

只需将其粘贴到一个空的查询窗口中并执行即可。适应你的需要

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;

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

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

ROWN    VARIABLES
1       variable1
2       variable2 
...     ...
然后,我在循环中,在过程中包括:

    SELECT @Variable_aux = VARIABLES
    FROM VARIABLES_LIST 
    WHERE ROWN = @i
所以我可以使用@variable_aux和每个@variablei的值。除此之外,我不必在主过程中输入所有变量的名称

对于有同样问题的人来说,很高兴知道


干杯

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