Sql 用基于集合的方法取代程序方法
我有一个存储过程,它从SSIS包中多次调用,并使用不同的值作为参数。存储过程包含对SSRS多维数据集的开放查询,并返回人员列表。结果集存储在临时表中Sql 用基于集合的方法取代程序方法,sql,sql-server,stored-procedures,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
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);
对于resultset中的每个人,应该有一个插入到另一个表中的信息。这些信息是人员的姓名、一些其他静态内容以及一个值,我可以从运行另一个存储过程中获取该值并计算返回的行数
插入的示例可以是
Name Static info @@rowcount
+-------------++--------------++--------------+
|Homer Simpson||Something here||ValueFromCount|
+-------------++--------------++--------------+
到目前为止,我有一个预写的存储过程,它将一行插入到所需的表中,但它有一个参数,即人名。我通过从当前SP执行另一个SP来获得@rowcount值,该SP有点嵌套,但工作正常
我可以很容易地为resultset中的每个人使用sqlwhile循环或游标,并调用insert SP,但我不禁想到必须有一种更有效的方法来实现这一点
现在的流量是
SSIS包执行返回人员列表的存储过程
对于列表中的每个人,执行SP_Insert_To_Table过程
2.1。在SP_Insert_To_Table过程中,执行SP_Get_All_操作并选择@@rowcount作为要插入的动态值
我的想法是,我可能能够将来自tmp表的结果与此人所做操作的计数连接起来,这样我就可以得到一个新的结果集,可以全部插入其中,但我无法计算出来,因为该计数对于列表中的每个人都是特定的
有没有一种方法可以以基于集合的方式来实现这一点,而不是使用程序化的方法?没有任何细节来处理这一点是有点挑战性的,但显然,消除循环应该是非常简单的。我所能做的只是粗略的伪代码
Insert into SomeTable (ColumnsListedHere)
from SomeOtherTable
join Something on some conditions
where SomeCriteria = GetListOfPerson
是的,我显然想得太多了。我了解你的一些想法,我正在接近一个解决方案!