循环遍历 SQL Server 表,为行运行存储过程,并将结果放入表中

Ois*_*ian 1 t-sql sql-server stored-procedures sql-server-2008-r2

我有一个 SQL Server 存储过程,用于获取员工几天内的上班时间。该过程使用卡代码值来获取有关员工的信息。

我想要做的是CardCodes从一个表中选择所有记录,然后循环运行存储过程的每条记录,然后使用每条记录的结果创建一个表。所以到最后将会有一张表记录每个员工的工作时间。

获取列表的查询CardCodes

SELECT     
    CardCode
FROM
    CHINA_VISION_PubCards
Run Code Online (Sandbox Code Playgroud)

会产生这样的列表。

007b7aaf
00cf77b6
00cf9200
00cf9f40
007B6FFB
00d398dd
00cf4673
Run Code Online (Sandbox Code Playgroud)

等等。

我可以像这样在 SQL Server 中运行存储过程。

EXEC [dbo].[getPast5DaysWorkedHours] @CardCode = N'007da097'
Run Code Online (Sandbox Code Playgroud)

007da097员工卡代码在哪里。

这会产生如下结果:

Employee Name | CardCode  |  Clock No  | Date   |  Seconds |  Time  
     Name       007da097      005718    2015.10.16  28761   07:59:21
     Name       007da097      005718    2015.10.21  28991   08:03:11
     Name       007da097      005718    2015.10.23  29768   08:16:08
     Name       007da097      005718    2015.10.28  29441   08:10:41
Run Code Online (Sandbox Code Playgroud)

重申一下我想要做的事情:我想循环遍历卡代码列表,并为每个卡代码运行带有值的存储过程cardCode。然后将每个过程调用的结果放入一张表中。

Cle*_*gic 6

SQL有while循环

While 循环 T-SQL

你可以做这样的事情。(未经测试)

IF OBJECT_ID('TempDB..#TEMP') IS NOT NULL DROP TABLE #TEMP
SELECT  distinct  CardCode
INTO #TEMP
FROM CHINA_VISION_PubCards

WHILE ( (select count(*) FROM #TEMP) > 0 )
    BEGIN
         DECLARE @CardCode varchar(50)
         SELECT TOP 1 @CardCode=CardCode FROM #TEMP

         INSERT INTO TableTarget
         EXEC [dbo].[getPast5DaysWorkedHours] @CardCode

         DELETE FROM #TEMP WHERE CardCode = @CardCode
    END
Run Code Online (Sandbox Code Playgroud)