Thanks,
No I dont use a loop. I use SQLPrepareDocument. I've thought about a trigger but the sproc might be called simultaneously by several users and I want to guarantee a consequtive number from 0 to n for each row as it relates to each XML doc being inserted. I think a trigger might get confused. I know that Oracle has a SEQUENCE function however, I can not find similar in SQL 2000. Only one XML document is being inserted and all the elements within it are dealt with transparently.
Here is the sproc. As you can see, I have declared a local variable @JobNumber. I've tried to select it and increment it in one statement (similar to what you would do if generating ID's from a table) however it will not accept the syntax.
Any ideas?
CREATE PROCEDURE dbo.Insert_tblSearchSetResults
@SearchSet varchar(1000),
@Mode varchar(1),
@XMLData text
AS
BEGIN
DECLARE @idoc int
DECLARE @doc varchar(1000)
declare @JobNumber tinyint
SET NOCOUNT ON
-- set the jobNumber to 1
SET @JobNumber = 1
-- remove first 77 characters from search set since they will always be the same
SET @searchSet = SUBSTRING(@searchset, 78, LEN(@searchSet)-77)
-- update cache stats
EXEC UpdateSearchSetCacheStats @searchSet, 1 -- 1 idicates creation of results
--Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @XMLData
IF EXISTS (SELECT [ID] FROM sysobjects WHERE([Name] = 'tblSearchSetResults'))BEGIN
-- SELECT stmt using OPENXML rowset provider
INSERT INTO [ESAPI].[tblSearchSetResults]
SELECT @SearchSet AS [SearchSetID],
@Mode AS [SearchMode],
*,
@JobNumber,
GETDATE() AS [timeCached]
FROM OPENXML (@idoc, '/JobVerbose/Record',2)
WITH (
RecordsReturned int '../RecordsReturned',
MatchCount int '../MatchCount',
VacID varchar(30),
VacTitle varchar(130),
VacSocCode varchar(5),
VacWageText varchar(52),
VacHoursText varchar(60),
VacWage varchar(52),
VacWageQualifier varchar(2),
VacHours float,
VacCurrency varchar(3),
VacHoursQualifier varchar(9),
Location varchar(40),
VacPermTempFlag varchar(1),
DateReceived varchar(8),
ESVac varchar(1),
Quality int,
ErrorCode varchar(10) '../ErrorCode',
ErrorDescription varchar(250) '../ErrorDescription'
)
END ELSE BEGIN
-- SELECT stmt using OPENXML rowset provider
SELECT @SearchSet AS [SearchSetID],
@Mode AS [SearchMode],
*,
GETDATE() AS [timeCached]
INTO [ESAPI].[tblSearchSetResults]
FROM OPENXML (@idoc, '/JobVerbose/Record',2)
WITH (
RecordsReturned int '../RecordsReturned',
MatchCount int '../MatchCount',
VacID varchar(14),
VacTitle varchar(130),
VacSocCode varchar(5),
VacWageText varchar(52),
VacHoursText varchar(60),
VacWage varchar(52),
VacWageQualifier varchar(2),
VacHours float,
VacCurrency varchar(3),
VacHoursQualifier varchar(9),
Location varchar(40),
VacPermTempFlag varchar(1),
DateReceived varchar(8),
ESVac varchar(1),
Quality int,
ErrorCode varchar(10) '../ErrorCode',
ErrorDescription varchar(250) '../ErrorDescription'
)
END
EXEC sp_xml_removedocument @iDoc
SET NOCOUNT OFF
END
GO