【发布时间】:2014-07-10 13:43:02
【问题描述】:
我有一个存储过程,它从 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,但我不禁想到必须有更有效的方法来执行此操作!
现在的流程是
- SSIS 包执行返回人员列表的存储过程
-
对于列表中的每个人,执行
SP_Insert_To_Table procedure。2.1。从
SP_Insert_To_Table procedure,执行SP_Get_All_Actions,选择@@rowcount作为要插入的动态值。
我的想法是,我可以将#tmp 表中的结果与此人所做的操作计数结合起来,这样我就可以得到一个可以全部插入的新结果集,但是我无法弄清楚,因为计数是针对列表中的每个人的。
有没有办法以基于集合的方式而不是使用程序方法来解决这个问题?
【问题讨论】:
标签: sql sql-server stored-procedures