Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 for xml  [new]
ASukhov1986
Member

Откуда: РФ, Москва
Сообщений: 252
У меня есть следующий запрос:
select top 1000 * from DEVICE_CALIBRATION_REC
for xml path,root('rows')

его результат (только часть):
<rows>
  <row>
    <DEVICE_ID>16796</DEVICE_ID>
    <ORDER_POS_ID>4863</ORDER_POS_ID>
    <DEVICE_COUNT>1</DEVICE_COUNT>
    <MARK_CIPHER>-</MARK_CIPHER>
    <SERIAL_NUM>б/н</SERIAL_NUM>
    <CALIBRATION_DATE>2004-02-19T00:00:00</CALIBRATION_DATE>
    <RESULT>1</RESULT>
    <EMPLOYEE_ID>376</EMPLOYEE_ID>
    <TARIF_ACTUAL>2160.0000</TARIF_ACTUAL>
    <RECSTATE>3</RECSTATE>
    <BLANK_TYPE_NUMERIC>0</BLANK_TYPE_NUMERIC>
  </row>
  <row>
    <DEVICE_ID>16797</DEVICE_ID>
    <ORDER_POS_ID>4864</ORDER_POS_ID>
    <DEVICE_COUNT>1</DEVICE_COUNT>
    <MARK_CIPHER>-</MARK_CIPHER>
    <SERIAL_NUM>б/н</SERIAL_NUM>
    <CALIBRATION_DATE>2004-02-19T00:00:00</CALIBRATION_DATE>
    <RESULT>1</RESULT>
    <EMPLOYEE_ID>376</EMPLOYEE_ID>
    <TARIF_ACTUAL>1500.0000</TARIF_ACTUAL>
    <RECSTATE>3</RECSTATE>
    <BLANK_TYPE_NUMERIC>0</BLANK_TYPE_NUMERIC>
  </row>
  <row>
    <DEVICE_ID>16798</DEVICE_ID>
    <ORDER_POS_ID>4865</ORDER_POS_ID>
    <DEVICE_COUNT>1</DEVICE_COUNT>
    <MARK_CIPHER>-</MARK_CIPHER>
    <SERIAL_NUM>б/н</SERIAL_NUM>
    <CALIBRATION_DATE>2004-02-19T00:00:00</CALIBRATION_DATE>
    <RESULT>1</RESULT>
    <EMPLOYEE_ID>376</EMPLOYEE_ID>
    <TARIF_ACTUAL>200.0000</TARIF_ACTUAL>
    <RECSTATE>3</RECSTATE>
    <BLANK_TYPE_NUMERIC>0</BLANK_TYPE_NUMERIC>
  </row>
  <row>
      ...
  </row>
</rows>


Как мне в xml результате отображать столбцы у которых значения равны
NULL
и которые не отображаются в результате?

P.S. результат (часть) запроса, только в текстовом виде:
DEVICE_ID   ORDER_POS_ID MARK_NUM                                END_MARK_NUM                            DEVICE_COUNT MARK_COUNT  MARK_CIPHER          OLD_MARK_NUM                            SERIAL_NUM                     CALIBRATION_DATE        NEXTCHECK_DATE          RESULT FILL_DATE               DOC                                                COMMENT                                                                                                                                                                                                                                                          EMPLOYEE_ID USAGE_REPORT_ID TARIF_ACTUAL                            RECSTATE POSITION                                           INITIALS                       DESCRIPTION                                                                                                                                                                                                                                                      STANDARDS                                                                                                                                                                                                                                                  FACTORS                                                                                                                                                                                                                                                    DELETE_DATE             BLANK_TYPE_NUMERIC BLANK_SERIAL_NUMBER  BLANK_TYPE END_BLANK_SERIAL_NUMBER CSS_ID
----------- ------------ --------------------------------------- --------------------------------------- ------------ ----------- -------------------- --------------------------------------- ------------------------------ ----------------------- ----------------------- ------ ----------------------- -------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------- --------------- --------------------------------------- -------- -------------------------------------------------- ------------------------------ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------- ------------------ -------------------- ---------- ----------------------- --------------------
16796       4863         NULL                                    NULL                                    1            NULL        -                    NULL                                    б/н                            2004-02-19 00:00:00.000 NULL                    1      NULL                    NULL                                               NULL                                                                                                                                                                                                                                                             376         NULL            2160.0000                               3        NULL                                               NULL                           NULL                                                                                                                                                                                                                                                             NULL                                                                                                                                                                                                                                                       NULL                                                                                                                                                                                                                                                       NULL                    0                  NULL                 NULL       NULL                    NULL
16797       4864         NULL                                    NULL                                    1            NULL        -                    NULL                                    б/н                            2004-02-19 00:00:00.000 NULL                    1      NULL                    NULL                                               NULL                                                                                                                                                                                                                                                             376         NULL            1500.0000                               3        NULL                                               NULL                           NULL                                                                                                                                                                                                                                                             NULL                                                                                                                                                                                                                                                       NULL                                                                                                                                                                                                                                                       NULL                    0                  NULL                 NULL       NULL                    NULL
16798       4865         NULL                                    NULL                                    1            NULL        -                    NULL                                    б/н                            2004-02-19 00:00:00.000 NULL                    1      NULL                    NULL                                               NULL                                                                                                                                                                                                                                                             376         NULL            200.0000                                3        NULL                                               NULL                           NULL                                                                                                                                                                                                                                                             NULL                                                                                                                                                                                                                                                       NULL                                                                                                                                                                                                                                                       NULL                    0                  NULL                 NULL       NULL                    NULL
195628      30066        NULL                                    NULL                                    1            NULL        7268173              NULL                                    6807                           2004-11-18 00:00:00.000 NULL                    1      NULL                    66195                                              NULL                                                                                                                                                                                                                                                             205         NULL            1440.0000                               3        NULL                                               NULL                           NULL                                                                                                                                                                                                                                                             NULL                                                                                                                                                                                                                                                       NULL                                                                                                                                                                                                                                                       NULL                    0                  NULL                 NULL       NULL                    NULL
453259      61641        7988447                                 7988447                                 1            NULL        NULL                 NULL                                    201035                         2004-10-26 00:00:00.000 NULL                    1      NULL                    75953                                              NULL                                                                                                                                                                                                                                                             423         NULL            400.0000                                3        NULL                                               NULL                           NULL                                                                                                                                                                                                                                                             NULL                                                                                                                                                                                                                                                       NULL                                                                                                                                                                                                                                                       NULL                    0                  NULL                 NULL       NULL                    NULL
455210      62195        7983039                                 7983039                                 1            NULL        NULL                 NULL                                    526                            2004-11-23 00:00:00.000 2008-11-23 00:00:00.000 1      NULL                    71315                                              NULL                                                                                                                                                                                                                                                             204         NULL            1050.0000                               3        NULL                                               NULL                           NULL                                                                                                                                                                                                                                                             NULL                                                                                                                                                                                                                                                       NULL                                                                                                                                                                                                                                                       NULL                    0                  NULL                 NULL       NULL                    NULL
455211      62195        7983038                                 7983038                                 1            NULL        NULL                 NULL                                    882                            2004-11-23 00:00:00.000 2008-11-23 00:00:00.000 1      NULL                    71316                                              NULL                                                                                                                                                                                                                                                             204         NULL            1050.0000                               3        NULL                                               NULL                           NULL                                                                                                                                                                                                                                                             NULL                                                                                                                                                                                                                                                       NULL                                                                                                                                                                                                                                                       NULL                    0                  NULL                 NULL       NULL                    NULL
455212      62195        7983037                                 7983037                                 1            NULL        NULL                 NULL                                    838                            2004-11-23 00:00:00.000 2008-11-23 00:00:00.000 1      NULL                    71317                                              NULL                                                                                                                                                                                                                                                             204         NULL            1050.0000                               3        NULL                                               NULL                           NULL                                                                                                                                                                                                                                                             NULL                                                                                                                                                                                                                                                       NULL                                                                                                                                                                                                                                                       NULL                    0                  NULL                 NULL       NULL                    NULL
455213      62195        7983036             
14 апр 15, 10:23    [17511328]     Ответить | Цитировать Сообщить модератору
 Re: for xml  [new]
Glory
Member

Откуда:
Сообщений: 104760
ASukhov1986
Как мне в xml результате отображать столбцы у которых значения равны NULL

А как вы хотите, чтобы эти столбцы отображались ?
14 апр 15, 10:27    [17511342]     Ответить | Цитировать Сообщить модератору
 Re: for xml  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Насколько я помню, NULL значения при создании XML отбрасываются. Тем более при парсинге Вашего XML NULL значения и так можно будет показать наглядно.
14 апр 15, 10:27    [17511345]     Ответить | Цитировать Сообщить модератору
 Re: for xml  [new]
ASukhov1986
Member

Откуда: РФ, Москва
Сообщений: 252
Glory,
<MARK_NUM>NULL</MARK_NUM>
Есть в команде for xml такая директива ELEMENTS и у нее параметр XSINIL, т.е.
select top 1000 * from DEVICE_CALIBRATION_REC
for xml path,root('rows'),ELEMENTS XSINIL


но результат нужно мне парсить (а точнее где строка с nil):
<rows xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <row>
    <DEVICE_ID>16796</DEVICE_ID>
    <ORDER_POS_ID>4863</ORDER_POS_ID>
    <MARK_NUM xsi:nil="true" />
    <END_MARK_NUM xsi:nil="true" />
    <DEVICE_COUNT>1</DEVICE_COUNT>
    <MARK_COUNT xsi:nil="true" />
    <MARK_CIPHER>-</MARK_CIPHER>
    <OLD_MARK_NUM xsi:nil="true" />
    <SERIAL_NUM>б/н</SERIAL_NUM>
    <CALIBRATION_DATE>2004-02-19T00:00:00</CALIBRATION_DATE>
    <NEXTCHECK_DATE xsi:nil="true" />
    <RESULT>1</RESULT>
    <FILL_DATE xsi:nil="true" />
    <DOC xsi:nil="true" />
    <COMMENT xsi:nil="true" />
    <EMPLOYEE_ID>376</EMPLOYEE_ID>
    <USAGE_REPORT_ID xsi:nil="true" />
    <TARIF_ACTUAL>2160.0000</TARIF_ACTUAL>
    <RECSTATE>3</RECSTATE>
    <POSITION xsi:nil="true" />
    <INITIALS xsi:nil="true" />
    <DESCRIPTION xsi:nil="true" />
    <STANDARDS xsi:nil="true" />
    <FACTORS xsi:nil="true" />
    <DELETE_DATE xsi:nil="true" />
    <BLANK_TYPE_NUMERIC>0</BLANK_TYPE_NUMERIC>
    <BLANK_SERIAL_NUMBER xsi:nil="true" />
    <BLANK_TYPE xsi:nil="true" />
    <END_BLANK_SERIAL_NUMBER xsi:nil="true" />
    <CSS_ID xsi:nil="true" />
  </row>
  <row>
...
</row>
</rows>
14 апр 15, 10:35    [17511383]     Ответить | Цитировать Сообщить модератору
 Re: for xml  [new]
Gviber
Member

Откуда:
Сообщений: 124
select top 1000 * from DEVICE_CALIBRATION_REC
for xml raw,root('rows'),elements xsinil


У path вроде нет аналога xsinil, но в вашем случае можно передлать в xml raw
14 апр 15, 10:36    [17511385]     Ответить | Цитировать Сообщить модератору
 Re: for xml  [new]
o-o
Guest
может, вы такое хотите?
declare @t table (id int, col varchar(10));
insert into @t (id) values (1), (2)

select * 
from @t
for xml path,root('rows')

--<rows>
--  <row>
--    <id>1</id>
--  </row>
--  <row>
--    <id>2</id>
--  </row>
--</rows>

select id, ISNULL(col, 'NULL') as col 
from @t
for xml path,root('rows')

--<rows>
--  <row>
--    <id>1</id>
--    <col>NULL</col>
--  </row>
--  <row>
--    <id>2</id>
--    <col>NULL</col>
--  </row>
--</rows>
14 апр 15, 10:39    [17511398]     Ответить | Цитировать Сообщить модератору
 Re: for xml  [new]
Gviber
Member

Откуда:
Сообщений: 124
Хотя нет у path все же можно применять elements xsinil.
14 апр 15, 10:40    [17511399]     Ответить | Цитировать Сообщить модератору
 Re: for xml  [new]
ASukhov1986
Member

Откуда: РФ, Москва
Сообщений: 252
Gviber, результат такой же как и я предложил
ASukhov1986
Glory,
<MARK_NUM>NULL</MARK_NUM>
Есть в команде for xml такая директива ELEMENTS и у нее параметр XSINIL, т.е.
select top 1000 * from DEVICE_CALIBRATION_REC
for xml path,root('rows'),ELEMENTS XSINIL


но результат нужно мне парсить (а точнее где строка с nil):
<rows xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <row>
    <DEVICE_ID>16796</DEVICE_ID>
    <ORDER_POS_ID>4863</ORDER_POS_ID>
    <MARK_NUM xsi:nil="true" />
    <END_MARK_NUM xsi:nil="true" />
    <DEVICE_COUNT>1</DEVICE_COUNT>
    <MARK_COUNT xsi:nil="true" />
    <MARK_CIPHER>-</MARK_CIPHER>
    <OLD_MARK_NUM xsi:nil="true" />
    <SERIAL_NUM>б/н</SERIAL_NUM>
    <CALIBRATION_DATE>2004-02-19T00:00:00</CALIBRATION_DATE>
    <NEXTCHECK_DATE xsi:nil="true" />
    <RESULT>1</RESULT>
    <FILL_DATE xsi:nil="true" />
    <DOC xsi:nil="true" />
    <COMMENT xsi:nil="true" />
    <EMPLOYEE_ID>376</EMPLOYEE_ID>
    <USAGE_REPORT_ID xsi:nil="true" />
    <TARIF_ACTUAL>2160.0000</TARIF_ACTUAL>
    <RECSTATE>3</RECSTATE>
    <POSITION xsi:nil="true" />
    <INITIALS xsi:nil="true" />
    <DESCRIPTION xsi:nil="true" />
    <STANDARDS xsi:nil="true" />
    <FACTORS xsi:nil="true" />
    <DELETE_DATE xsi:nil="true" />
    <BLANK_TYPE_NUMERIC>0</BLANK_TYPE_NUMERIC>
    <BLANK_SERIAL_NUMBER xsi:nil="true" />
    <BLANK_TYPE xsi:nil="true" />
    <END_BLANK_SERIAL_NUMBER xsi:nil="true" />
    <CSS_ID xsi:nil="true" />
  </row>
  <row>
...
</row>
</rows>
14 апр 15, 10:41    [17511405]     Ответить | Цитировать Сообщить модератору
 Re: for xml  [new]
Glory
Member

Откуда:
Сообщений: 104760
ASukhov1986
<MARK_NUM>NULL</MARK_NUM>

Для любого типа данных что ли ?

ASukhov1986
но результат нужно мне парсить (а точнее где строка с nil):

Зачем парсить стандарное обозначение NULL ? Вы свой личный парсер xml что ли создаете ?
14 апр 15, 10:41    [17511406]     Ответить | Цитировать Сообщить модератору
 Re: for xml  [new]
ASukhov1986
Member

Откуда: РФ, Москва
Сообщений: 252
o-o,
это выход конечно, но придется isnull для каждого столбца (который может быть NULL) писать
14 апр 15, 10:42    [17511418]     Ответить | Цитировать Сообщить модератору
 Re: for xml  [new]
Glory
Member

Откуда:
Сообщений: 104760
ASukhov1986
но придется isnull для каждого столбца (который может быть NULL) писать

Ага. Учитывая еще то, что и падать будет
select isnull(cast(NULL as int), 'NULL')
14 апр 15, 10:44    [17511429]     Ответить | Цитировать Сообщить модератору
 Re: for xml  [new]
ASukhov1986
Member

Откуда: РФ, Москва
Сообщений: 252
Glory,
мне нужно перевести из XML в JSON
14 апр 15, 10:46    [17511439]     Ответить | Цитировать Сообщить модератору
 Re: for xml  [new]
Glory
Member

Откуда:
Сообщений: 104760
ASukhov1986
мне нужно перевести из XML в JSON

И поэтому нужно писать свой личный парсер xml ?
14 апр 15, 10:47    [17511452]     Ответить | Цитировать Сообщить модератору
 Re: for xml  [new]
ASukhov1986
Member

Откуда: РФ, Москва
Сообщений: 252
Glory,
да
14 апр 15, 10:51    [17511468]     Ответить | Цитировать Сообщить модератору
 Re: for xml  [new]
Glory
Member

Откуда:
Сообщений: 104760
ASukhov1986
Glory,
да

И почему ваш рукописный xml парсер не в состоянии распарсить _стандартную_ нотацию NULL-а ?
14 апр 15, 10:54    [17511490]     Ответить | Цитировать Сообщить модератору
 Re: for xml  [new]
ASukhov1986
Member

Откуда: РФ, Москва
Сообщений: 252
Glory, я просто спрашиваю можно как то распрасить это другими средствами и не писать мне код самому
14 апр 15, 10:55    [17511501]     Ответить | Цитировать Сообщить модератору
 Re: for xml  [new]
Glory
Member

Откуда:
Сообщений: 104760
ASukhov1986
я просто спрашиваю можно как то распрасить это другими средствами и не писать мне код самому

Ну так любым парсером, который деклалирует использование стандартов. DOM, например
И вообще есть отдельный форум по XML
14 апр 15, 11:03    [17511556]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить