【发布时间】: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