用基于集合的方法替换程序方法

时间:2014-07-10 13:43:02

标签: sql sql-server stored-procedures

我有一个存储过程,它从SSIS包中多次调用,并使用不同的值作为参数。存储过程包含对SSRS多维数据集的打开查询,并返回人员列表。结果集存储在临时表中。

CREATE TABLE #tmp (Person varchar(50), Cat1 bit, Cat2 bit, Cat3 bit, Cat4 bit, Cat5 bit)
INSERT INTO #tmp EXEC sys.sp_executesql @query

SET @sqlCommand = 'SELECT Person FROM #tmp WHERE ' + @Category + '= 1'
EXEC (@sqlCommand);

对于结果集中的每个人,应该插入另一个包含一些信息的表。信息是人员的名称,一些其他静态内容,以及我可以通过运行另一个存储过程获得的值并计算返回的行。

插入的示例可以是

     Name        Static info      @@rowcount   
+-------------++--------------++--------------+
|Homer Simpson||Something here||ValueFromCount|
+-------------++--------------++--------------+

截至目前,我有一个预先写好的存储过程,它将一行插入到所需的表中,但它有一个参数,即人名。我通过从当前SP执行另一个SP得到@@rowcount值(有点嵌套但工作正常)。

我可以轻松地为结果集中的每个人使用SQL WHILE循环或CURSOR,并调用插入SP,但我不禁认为必须有更高效率这样做的方式!

现在的流程是

  1. SSIS包执行返回人员列表的存储过程
  2. 对于列表中的每个人,请执行SP_Insert_To_Table procedure

    2.1。从SP_Insert_To_Table procedure开始,执行SP_Get_All_Actions并选择@@rowcount作为要插入的动态值。

  3. 我认为我可以将#tmp表中的结果与该人所做的操作计数结合起来,这样我就可以得到一个可以插入的新结果集,但我无法弄明白,因为计数是针对列表中每个人的具体情况。

    有没有办法以基于集合的方式而不是使用程序方法?

1 个答案:

答案 0 :(得分:0)

没有任何细节可以使用这有点挑战,但它听起来像删除循环应该是非常直接的。我所能做的只是粗糙的伪代码。

Insert into SomeTable (ColumnsListedHere)
from SomeOtherTable
join Something on some conditions
where SomeCriteria = GetListOfPerson