Я пытаюсь сделать немного другое SELECT в SQL Server 2008. Мне нужно импортировать XML-файл в таблицу, но сначала я должен выполнить некоторую проверку.IF Внутри SELECT From XML
Когда я делаю SELECT
по XML, мне нужно проверить, существует ли строка XML в таблице, используя столбцы и Data
из таблицы как ПК. Если существует, мне нужно обновить строку с информацией, прочитанной из XML, если нет, мне просто нужно вставить ее в таблицу.
XML Пример строки:
<viagem id="0000EPN" date="2013-01-01T00:00:00" type="EXTRA"
status="NORMAL" modalid="IPANEM" fleetid="B200"
departuretime="2013-04-01T00:00:00" arrivaltime="2013-01-01T00:20:00"
maxpasg="2000" locationid="XX" codredlinha="0007" />
Код:
SELECT @ViagemID = r.value('(@id)[1]', 'VARCHAR(30)'), @Data = CAST(CONVERT(datetime,r.value('(@date)[1]', 'datetime')) as float),
@Extra = CASE (r.value('(@type)[1]', 'VARCHAR(15)')) WHEN 'EXTRA' THEN 1 ELSE 0 END, @FleetID = r.value('(@fleetid)[1]', 'VARCHAR(15)'),
@Partida = r.value('(@departuretime)[1]', 'datetime'), @Chegada = r.value('(@arrivaltime)[1]', 'datetime'), @Capacidade = r.value('(@maxpasg)[1]', 'int'),
@LocationID = r.value('(@locationid)[1]', 'VARCHAR(10)'), @CodLinha = r.value('(@codredlinha)[1]', 'int')
IF EXISTS (SELECT * FROM dbo.ImportacaoXML WHERE ViagemID = @ViagemID AND Data = @Data)
BEGIN
UPDATE dbo.ImportacaoXML SET ViagemID = @ViagemID, Data = @Data, Extra = @Extra, FleetID = @FleetID, Partida = @Partida,
Chegada = @Chegada, Capacidade = @Capacidade, LocationID = @LocationID, CodLinha = @CodLinha
WHERE ViagemID = @ViagemID AND Data = @Data
END
ELSE
BEGIN
INSERT INTO dbo.ImportacaoXML VALUES(@ViagemID, @Data, @Extra, @FleetID, @Partida, @Chegada, @Capacidade, @LocationID, @CodLinha)
END
FROM (SELECT CAST(x AS XML) FROM OPENROWSET (BULK '\\10.16.68.253\XXXXx\Xxxx.xml', SINGLE_BLOB) AS T(x)) AS T(x)
CROSS APPLY x.nodes('/root/viagem') AS X(r);
Но я получаю ошибку в последней строке FROM
(неправильный синтаксис около AS).
Я мог бы использовать SELECT
внутри оператора if, но мне нужно прочитать весь XML, это остановит выполнение. Впоследствии мне нужно будет добавить несколько инструкций IFs.
Примечание 1: Я новичок в SQL, извините, если о какой-либо дерьме.
Примечание 2: Меня тоже беспокоит производительность, потому что я не уверен, является ли этот код лучшей практикой программы, а мой стол будет расти.
Это SQL как вывешено не действует - это даже не пройти проверку синтаксиса ... первый выключен: не так ** объявить ** все эти переменные SQL? Также: не следует ли 'SELECT' и' FROM .... 'быть вместе - перед целым' IF EXIST (...) 'block ?? –
Я просто удалил объявление переменных. И часть XML работает. Если я использую IF EXIST после предложения FROM, он получает последнюю строку XML. – Juliano
Это действительно не совсем понятно, что вы пытаетесь сделать - также: можете ли вы предоставить образец XML и объяснить **, что ** вы хотите извлечь из этого XML в ваши таблицы SQL Server? –