对 SQL 服务器 Table 中的每一行执行存储过程
Executing a stored procedure on every row in a SQL Server Table
所以我花了很多时间在 Stack Overflow 上寻找 SQL 的这一点,它将填充一个字段,以显示项目已经延迟的工作天数。
该视图将来自 MS SQL 服务器 (2008) 上两个本地 table 的数据连接起来,我已经编写了存储过程来计算两天之间的工作日,称为通过:
EXECUTE spWorkDaysLate '01/01/20XX', '01/02/20XX'
但是我不确定如何遍历视图中的每条记录,因为 table 中的每个条目都需要这样做。我的 table 中的相关字段是 startDate、endDate,我将使用 endDate 和 startDate 作为参数,用上面存储过程的结果填充最终字段 (daysLate)。我在网上找到了一些使用游标命令循环遍历 table 的建议,这将是 SQL 我想要 运行:
DECLARE @MyCursor CURSOR;
DECLARE @MyField int;
SET @MyField = 'daysLate' /* Do need to do this, or is the an argument I pass? */
BEGIN
SET @MyCursor = CURSOR FOR
select top 1000 daysLate from dbo.vQualityControl
OPEN @MyCursor
FETCH NEXT FROM @MyCursor
INTO @MyField
WHILE @@FETCH_STATUS = 0
BEGIN
/*
YOUR ALGORITHM GOES HERE
*/
FETCH NEXT FROM @MyCursor
INTO @MyField
END;
CLOSE @MyCursor ;
DEALLOCATE @MyCursor;
END;
我是 SQL 的新手,所以我知道我想要 运行 的伪代码类似于 for each 循环,在我看来,它看起来像:
WHILE @@FETCH_STATUS = 0
BEGIN
/* Bad code */
daysLate.Value = EXECUTE spWorkDaysLate @startDate, @endDate;
FETCH NEXT FROM @MyCursor
INTO @MyField
END;
我知道这在语法上是错误的,那么我应该在循环中放置什么,以便字段 'daysLate' 被调用的存储过程的结果填充?
你试过FUNCTION吗,你可以在你的FUNCTION中计算两天之间的工作日。
SELECT *, dbo.fn_WorkDaysLate (startDate, endDate) AS DaysLate FROM dbo.vQualityControl
--OR
UPDATE A
SET A.DaysLate = dbo.fn_WorkDaysLate (A.startDate, A.endDate)
FROM dbo.vQualityControl A
所以我花了很多时间在 Stack Overflow 上寻找 SQL 的这一点,它将填充一个字段,以显示项目已经延迟的工作天数。
该视图将来自 MS SQL 服务器 (2008) 上两个本地 table 的数据连接起来,我已经编写了存储过程来计算两天之间的工作日,称为通过:
EXECUTE spWorkDaysLate '01/01/20XX', '01/02/20XX'
但是我不确定如何遍历视图中的每条记录,因为 table 中的每个条目都需要这样做。我的 table 中的相关字段是 startDate、endDate,我将使用 endDate 和 startDate 作为参数,用上面存储过程的结果填充最终字段 (daysLate)。我在网上找到了一些使用游标命令循环遍历 table 的建议,这将是 SQL 我想要 运行:
DECLARE @MyCursor CURSOR;
DECLARE @MyField int;
SET @MyField = 'daysLate' /* Do need to do this, or is the an argument I pass? */
BEGIN
SET @MyCursor = CURSOR FOR
select top 1000 daysLate from dbo.vQualityControl
OPEN @MyCursor
FETCH NEXT FROM @MyCursor
INTO @MyField
WHILE @@FETCH_STATUS = 0
BEGIN
/*
YOUR ALGORITHM GOES HERE
*/
FETCH NEXT FROM @MyCursor
INTO @MyField
END;
CLOSE @MyCursor ;
DEALLOCATE @MyCursor;
END;
我是 SQL 的新手,所以我知道我想要 运行 的伪代码类似于 for each 循环,在我看来,它看起来像:
WHILE @@FETCH_STATUS = 0
BEGIN
/* Bad code */
daysLate.Value = EXECUTE spWorkDaysLate @startDate, @endDate;
FETCH NEXT FROM @MyCursor
INTO @MyField
END;
我知道这在语法上是错误的,那么我应该在循环中放置什么,以便字段 'daysLate' 被调用的存储过程的结果填充?
你试过FUNCTION吗,你可以在你的FUNCTION中计算两天之间的工作日。
SELECT *, dbo.fn_WorkDaysLate (startDate, endDate) AS DaysLate FROM dbo.vQualityControl
--OR
UPDATE A
SET A.DaysLate = dbo.fn_WorkDaysLate (A.startDate, A.endDate)
FROM dbo.vQualityControl A