Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá! Estou importando um xml para o banco de dados, porém o dado Lap importa tudo em um campo só, assim: Id Name CarType position Lap Laps Pitstops FinishStatus
1 Diego Jacometti F1BC Formula Light 1 --.----108.6030107.8197--.---- 4 1 Mas na verdade eu quero que fique separado em 2 registros, tipo assim: Id Name CarType position Lap Laps Pitstops FinishStatus
1 Diego Jacometti F1BC Formula Light 1 --.----108.6030--.---- 4 1 2 Diego Jacometti F1BC Formula Light 1 --.----107.8197--.---- 4 1 Tem como isso? abaixo segue o trecho do xml e mais abaixo o sql que uso pra importar Diego Jacometti
1
EQUIPE38FL.VEH
00000000 00000000
Equipe38
F1BC Formula Light
F1BC Formula Light
1000
Supersoft Compound
1
1
1
0
0
1
--.----
108.6030
107.8197
--.----
107.8197
4
1
Finished Normally
PlayerControl,ABS=1,Clutch,AutoBlip [inline]USE [F1BC]
GO -- Criação de tabela temporária IF OBJECT_ID('tempdb..#RaceResult') IS NOT NULL
BEGIN
DROP TABLE #RaceResult
END CREATE TABLE #RaceResult (
[Name] varchar NOT NULL,
[CarType] varchar NOT NULL,
[position] varchar NOT NULL,
[Lap] varchar NOT NULL,
[Laps] varchar NOT NULL,
[Pitstops] varchar NOT NULL,
[FinishStatus] varchar NULL,
) -- Carregando os dados a partir do arquivo XML INSERT INTO #RaceResult
(Name,CarType, position,Lap,Laps,Pitstops,FinishStatus)
SELECT
X.Driver.query('Name').value('.', 'VARCHAR(50)'),
X.Driver.query('CarType').value('.', 'VARCHAR(50)'),
X.Driver.query('Position').value('.', 'VARCHAR(50)'),
X.Driver.query('Lap').value('.', 'VARCHAR(50)'),
X.Driver.query('Laps').value('.', 'VARCHAR(50)'),
X.Driver.query('Pitstops').value('.', 'VARCHAR(50)'),
X.Driver.query('FinishFinishStatus').value('.', 'VARCHAR(50)') FROM
(
SELECT CONVERT(xml, X, 2)
FROM OPENROWSET(
BULK 'C:\Users\Diego\Desktop\F1BC\TestesF1BC\Race1.xml',
SINGLE_BLOB) AS T(X)
) AS T(X)
CROSS APPLY X.nodes('rFactorXML/RaceResults/Qualify/Driver') AS X(Driver). -- Incluindo as informações na tabela piloto DECLARE @Name VARCHAR(50)
DECLARE @CarType VARCHAR(50)
DECLARE @position VARCHAR(50)
DECLARE @Lap VARCHAR(50)
DECLARE @Laps VARCHAR(50)
DECLARE @Pitstops VARCHAR(50)
DECLARE @FinishStatus VARCHAR(50) DECLARE crRaceResult CURSOR FOR
SELECT Name,CarType,position, Lap,Laps,Pitstops,FinishStatus
FROM #RaceResult
ORDER BY position OPEN crRaceResult FETCH NEXT FROM crRaceResult INTO
@Name, @CarType, @position, @Lap, @Laps, @Pitstops, @FinishStatus BEGIN TRANSACTION -- Inicia uma nova transação WHILE @@FETCH_STATUS = 0
BEGIN
--IF (LTRIM(RTRIM(@Name)) = '')
-- SET @Name = NULL IF (NOT EXISTS(SELECT 1 FROM dbo.RaceResult WHERE Name = @Name))
BEGIN
INSERT INTO dbo.RaceResult
(Name,CarType,position, Lap,Laps,Pitstops,FinishStatus
)
VALUES
(@Name,@CarType,@position,@Lap,@Laps,@Pitstops,@FinishStatus
)
END
ELSE
BEGIN
UPDATE dbo.RaceResult
SET Name = @Name,CarType = @CarType,position = @position,Lap = @Lap,Laps = @Laps,Pitstops = @Pitstops,FinishStatus = @FinishStatus
WHERE Name = @Name
END FETCH NEXT FROM crRaceResult INTO
@Name, @CarType, @position, @Lap, @Laps, @Pitstops, @FinishStatus
END CLOSE crRaceResult DEALLOCATE crRaceResult -- Verifica a ocorrência de erros e, em caso negativo, confirma
-- a transação iniciada anteriormente IF (@@ERROR = 0)
BEGIN
COMMIT TRANSACTION
END
ELSE
BEGIN
ROLLBACK TRANSACTION
END [/inline]
Carregando comentários...