Thanks for your encouragement! Sorry, I have been on vacation. I will include the two tables and some code now.
Vehicle Detail:
VinSerialNumberProgYearLeaseCycleModelNameRiskNonriskFlagRegionReturnDate
ZL1529831FADP3K22ZL152983131FOCUSRSOUTHEAST
ZL1852231FADP3K20ZL185223131FOCUSRSOUTHEAST
ZL1965361FADP3F27ZL196536131FOCUSRSOUTHEAST
ZL2652731FADP3F27ZL265273131FOCUSRSOUTHEAST
ZL1965801FADP3F2XZL196580131FOCUSRSOUTHEAST
ZL1965901FADP3F22ZL196590131FOCUSRSOUTHEAST
ZL1711981FADP3F29ZL171198131FOCUSRSOUTHEAST
ZL1712581FADP3F21ZL171258131FOCUSRSOUTHEAST
ZL1712681FADP3K27ZL171268131FOCUSRSOUTHEAST
ZL2115291FADP3F2XZL211529131FOCUSRSOUTHEAST
ZL2115321FADP3F2XZL211532131FOCUSRSOUTHEAST
ZL2116171FADP3F27ZL211617131FOCUSRSOUTHEAST
Returns Pros:
RegionProgYearRiskNonRiskFlagMFGLeaseCycleModelNameReturnDateUnitCount
Southeast13RFRD1FOCUS1/4/201412
I agree with you about the looping, but have not been able to figure out a way to do it without looping. The problem is that the UnitCount column from the "Returns Pros" table becomes the top value in the query - hence the need for a "dynamic" (concatenated) SQL query.
The following looping code is what shaved an hour:
DECLARE @RowCount INT
SET @RowCount = (SELECT COUNT(MFG) FROM [Returns Pros])
CREATE TABLE #tmpReturns(ID INT IDENTITY (1,1) PRIMARY KEY, MFG VARCHAR(20), ModelName VARCHAR(20), ProgYear VARCHAR(12),ReturnDate DATETIME,RiskNonRiskFlag VARCHAR(12), LeaseCycle VARCHAR(12), Region VARCHAR(50), UnitCount INT)
--CREATE UNIQUE CLUSTERED INDEX Idx1 ON #tmpReturns(ID);
INSERT INTO #tmpReturns SELECT MFG, ModelName, ProgYear, ReturnDate, RiskNonRiskFlag, LeaseCycle, Region, UnitCount FROM [Returns Pros]
-- Declare an iterator
DECLARE @I INT
-- Initialize the iterator
SET @I = 1
SET NOCOUNT ON
-- Loop through the rows of a table @myTable
WHILE (@I <= @RowCount)
BEGIN
-- Declare variables to hold the data which we get after looping each record
DECLARE @mfg VARCHAR(50), @ModelName VARCHAR(50), @ProgYear VARCHAR(50)
DECLARE @ReturnDate DateTime, @RiskFlag VarChar(25), @LeaseCycle VarChar(2)
DECLARE @Region VARCHAR(50), @UnitCount VarChar(20), @SQL VarChar(450)
-- Get the data from table and set to variables
SELECT @mfg=mfg, @ModelName=ModelName, @ProgYear=ProgYear, @ReturnDate=ReturnDate, @RiskFlag=RiskNonRiskFlag,
@LeaseCycle=LeaseCycle, @Region=Region, @UnitCount=UnitCount
FROM #tmpReturns WHERE ID=@I
-- Display the looped data
Set @SQL ='UPDATE [Vehicle Detail] SET [Vehicle Detail].ReturnDate=''' + Cast(@ReturnDate as VarChar(20)) +
''' WHERE SerialNumber in (Select Top ' + @UnitCount + ' SerialNumber From [Vehicle Detail] WHERE MFG='''
+ @MFG + ''' And ModelName=''' + @ModelName + ''' And ProgYear=''' + @ProgYear + ''' And RiskNonRiskFlag='''
+ @RiskFlag + ''' And LeaseCycle=''' + @LeaseCycle + ''' And Region=''' + @Region + ''' And ReturnDate Is Null '
+ 'ORDER BY [Vehicle Detail].DeliveryDate, [Vehicle Detail].[SerialNumber])'
Exec (@sql)
-- Increment the iterator
SET @I = @I + 1
End