我已经定义了一个计算大量统计信息的过程,假设它的名称是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,这段代码可以正常工作,但是如果有更多变量,我就无法做到。
一定很容易,但我无法找到有关它的任何信息!
谢谢!
答案 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的值一起使用。更重要的是,我不必在主程序中输入所有变量的名称。
对于遇到同样问题的人来说,这很有用。
干杯!