在SQL Server中动态创建变量

时间:2016-04-22 16:16:54

标签: tsql variables sql-server-2008-r2

Good Afternoon All,

任何人都可以建议我是否可以动态声明并为下面描述的场景中的变量赋值?

我编写了一个存储过程(sproc),用于计算组织子组中成员的百分比。

我知道有7个小组。我将百分比计算的结果存储在7个变量中,我稍后在sproc中使用它们。每个变量都根据子组名称命名。

当然这意味着如果子组的名称或数量发生变化,我必须重写部分sproc。

我相信动态SQL可用于允许sproc适应子组中的更改,但我不确定如何为此方案设置动态SQL。任何人都可以提供示例或指导吗?

2 个答案:

答案 0 :(得分:1)

你提出的建议违反了Sql Server中的内容。您对以后必须重写的担忧有点说明......所以您需要关注正确的方向。

通常,您希望将结果转换为某种面向集合的东西......类似于表格...其中一列具有子组的名称,另一列具有计算值。

您可能会发现table-valued functions更适合您的问题...但很难说......我们在这个问题上没有深入细节。

动态SQL几乎总是最后的选择。它似乎很有趣,但有各种各样的问题......其中最重要的是以编程安全和一致的方式解决结果。

答案 1 :(得分:0)

您可以按照这个简单的查询来了解如何做到这一点

declare @sql nvarchar(max) = ''
declare @outerX int = 0 -- this is your variable you want to set it from dynamic SQL 
declare @i int = 0 -- for loop

while @i <= 6 
begin
  set @sql = 'select @x = ' + CAST(@i as varchar)
  exec sp_executesql @sql, N'@x int OUTPUT', @x = @outerX output
  set @i = @i + 1
  print @outerX
end

输出

0
1
2
3
4
5
6

More Detail Here