last day (15 days later) » 

12:08 PM
Hi there
 
12:27 PM
Мне нужно теперь прочитать данные с созданного xml документа и занести эти данные обратно в базу(при выполнении неких условий) с помощью FOR OPENXML. – SVD102 9 минут назад

Я написал sql скрипт, который получает данные с xml файла. То есть на выходе получается некая таблица. Как мне теперь эти данные проверить и занести в некоторую таблицу в БД?
--Объявляем переменные

DECLARE @XML_Doc XML;
DECLARE @XML_Doc_Handle INT;

SET @XML_Doc = (SELECT * FROM OPENROWSET(
BULK 'D:\Документы\SQL Server Management Studio\xmlresult12.xml',
SINGLE_CLOB) AS A)--SINGLE_BLOB

--Подготавливаем XML документ
EXEC sp_xml_preparedocument @XML_Doc_Handle OUTPUT, @XML_Doc;

--Извлекаем данные из XML документа
SELECT N_P AS Id, FAM AS Surname, IM AS Name, OT AS MiddleName, DR AS DateBirth, W AS Gender
FROM OPENXML (@XML_Doc_Handle, '/Z_LIST/ZAP', 2)
WITH (
N_P int,
 
OPENXML лучше не использовать. Это проприетарная реализация Microsoft для устаревшего SQL Server 2000.
Лучше использовать методы XQuery .nodes () и.value ()
XQuery доступен в SQL Server 2005 и более поздних версиях.
Нужно ли загружать данные из файла XML в одну таблицу базы данных?
 
Задача 3: Проверка и импорт общего списка застрахованных лиц
При помощи OPENXML и средств T-SQL выполнить форматно-логический контроль структуры XML-файла и закачать в таблицы 1, 2, где фамилия (имя, отчество) состоит из символов исходной фамилии (соответственно имя, отчество) в произвольном порядке с совпадением по количеству символов.
При несовпадении структуры XML или формата полей вывести список ошибок.


Задача 4: Проверка и импорт данных о текущем страховании лиц
При помощи OPENXML и средств T-SQL выполнить форматно-логический контроль структуры XML-файла и закачать в таблицы 1, 2
 
Как я уже объяснял, OPENXML предназначен для устаревшего .SQL Server 2000. Какая у вас версия SQL Server?
Откуда у тебя задачи?
Ты еще там?
 
12:44 PM
Я тут. Это ТЗ.
ТЗ - Тестовое задание
У меня SQL SERVER 2014/
 
Человек, создавший эти задачи, отодвигает вас назад в архаичную эпоху.
 
Я это понял, но вы можете помочь мне с моими вопросами?
 
Если вам интересно, как это сделать правильно, могу вам показать.
C методом XQuery .nodes () и.value ()
 
Хорощо, давайте так.
 
хорошо
У тебя есть скайп? У нас может быть интерактивный сеанс.
 
12:53 PM
Да, vitek.sayapoff
Но сейчас не могу говорить.
 
нет проблем
 
Вы напишите тогда в скайпе.
 
DECLARE @xml XML =
N'<Z_LIST>
<ZGL>
<FILENAME>fileName</FILENAME>
</ZGL>
<ZAP>
<N_P>1</N_P>
<FAM>ИВАНОВ</FAM>
<IM>ИВАН</IM>
<OT>ИВАНОВИЧ</OT>
<DR>2000-01-01</DR>
<W>1</W>
<OMC>
<SMO>100</SMO>
<NAIM>СТРАХОВАЯ КОМПАНИЯ Globus</NAIM>
<POLIS>GL1000</POLIS>
<D1>2000-02-01</D1>
<D2>2010-01-01</D2>
</OMC>
<OMC>
<SMO>150</SMO>
<NAIM>СТРАХОВАЯ КОМПАНИЯ Liberty</NAIM>
<POLIS>LI1207</POLIS>
<D1>2010-02-01</D1>
</OMC>
</ZAP>
<ZAP>
<N_P>2</N_P>
<FAM>Александрова</FAM>
<IM>Александра</IM>
<OT>Александровна</OT>
+-----+--------------+
| N_P | FAM |
+-----+--------------+
| 1 | ИВАНОВ |
| 2 | Александрова |
+-----+--------------+
ЭТО после того, как XML уже загружен из файла в переменную @xml.
 
SELECT c.value('(N_P/text())[1]', 'INT') AS N_P
, c.value('(FAM/text())[1]', 'NVARCHAR(50)') AS FAM
-- И так далее
FROM @xml.nodes('/Z_LIST/ZAP') AS t(c);
При выполнении данного запроса, получаем таблицу с данными.
Как мне эти данные проверить и занести в БД
 
-- INSERT INTO targetTable (N_P, FAM)
SELECT c.value('(N_P/text())[1]', 'INT') AS N_P
, c.value('(FAM/text())[1]', 'NVARCHAR(50)') AS FAM
-- И так далее
FROM @xml.nodes('/Z_LIST/ZAP') AS t(c);
 
1:00 PM
Допустим надо проверить на совпадение ФИО и занести в таблицу2
 
Во-первых, проверьте правильность ввода данных при выборе. Убедившись, что раскомментируйте первую строку
Я ответил на ваш вопрос, как преобразовать тип данных XML в прямоугольный / реляционный формат. После этого все твое
 
Не понял как мне проверить данные между вставкой и после получения
 
Ваша целевая таблица пуста?
 
Нет. Есть некоторые тестовые данные
 
Если ДА, просто ВСТАВЬТЕ. Если НЕТ, оператор MERGE T-SQL может выполнить INSERT / UPDATE / DELETE за один раз.
Итак, оператор MERGE T-SQL - это ответ
Надеюсь я ответил на все твои вопросы
Пожалуйста, отметьте мой ответ на stackoverlow.com как ответ
 
1:07 PM
Ок. Спасибо.
 
Пока. Мой SKype ID: ykhabins
 

last day (15 days later) »