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。然后将每个过程调用的结果放入一张表中。
SQL有while循环
你可以做这样的事情。(未经测试)
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)