我有一个SQL Server存储过程,可以在几天内获得员工的时钟。该过程使用卡代码值来获取有关员工的信息。
我想要做的是从一个表中选择所有CardCodes
,然后遍历运行存储过程的每个记录,然后创建一个包含每个记录结果的表。所以到最后会有一个表,每个员工的工作时间。
查询获取CardCodes
的列表:
SELECT
CardCode
FROM
CHINA_VISION_PubCards
生成这样的列表。
007b7aaf
00cf77b6
00cf9200
00cf9f40
007B6FFB
00d398dd
00cf4673
等等。
我可以像这样在SQL Server中运行存储的进程。
EXEC [dbo].[getPast5DaysWorkedHours] @CardCode = N'007da097'
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
重申我要做的事情:我想遍历卡片代码列表,并为每个卡片代码运行带有cardCode
值的存储过程。然后将每个过程调用的结果放入一个表中。
答案 0 :(得分:1)
答案 1 :(得分:1)
您可以使用WHILE循环遍历每个条目,而无需使用游标或重复SELECT和DELETE:
DECLARE @store table (id bigint identity(1,1), CardCode (your cardcode column type here))
insert into @store (CardCode)
SELECT DISTINCT
CardCode
FROM
CHINA_VISION_PubCards
declare @idx bigint = 1
declare @max bigint = (select MAX(id) from @store)
WHILE @idx<=@max
BEGIN
EXEC [dbo].[getPast5DaysWorkedHours] @CardCode = (select top 1 CardCode from @store where id = @idx)
set @idx = @idx+1
END
但评论是正确的 - 如果你可以使用表值参数来传递一组值,那就更好了。