我有一个存储过程,它从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,但我不禁认为必须有更高效率这样做的方式!
现在的流程是
对于列表中的每个人,请执行SP_Insert_To_Table procedure
。
2.1。从SP_Insert_To_Table procedure
开始,执行SP_Get_All_Actions
并选择@@rowcount
作为要插入的动态值。
我认为我可以将#tmp
表中的结果与该人所做的操作计数结合起来,这样我就可以得到一个可以插入的新结果集,但我无法弄明白,因为计数是针对列表中每个人的具体情况。
有没有办法以基于集合的方式而不是使用程序方法?
答案 0 :(得分:0)
没有任何细节可以使用这有点挑战,但它听起来像删除循环应该是非常直接的。我所能做的只是粗糙的伪代码。
Insert into SomeTable (ColumnsListedHere)
from SomeOtherTable
join Something on some conditions
where SomeCriteria = GetListOfPerson