сериализация повышения макрос NVP и символы элемента не XML

Вы должны использовать функцию case when, чтобы вы могли установить значение, проверяя определенное условие.

update SNPD
set SNPD.supplier= case when SNPD.Supplier_Agent='Supplier' then 1 else 0 
end,
SNPD.Agent= case when SNPD.Supplier_Agent='Agent' then 1 else 0 end 
FROM SuppliersNPD as SNPD

Я также рекомендую вам использовать перечисление вместо «поставщик» и «агент» для определения типа поставщика. Например, вы могли бы создать столбец с именем Type и использовать код 100 для поставщиков и 200 для агентов. Это кажется более сложным, но облегчает ведение таблицы и часто используется в программном обеспечении ERP.

5
задан Assaf Lavie 29 March 2009 в 23:39
поделиться

2 ответа

Заключение в кавычки синтаксиса XML для имен:

NameStartChar ::=   ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
NameChar      ::=   NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]

Я вижу следующие различия с именами C++: Продвижение _ может быть зарезервировано в C++, в зависимости от того, что следует; двоеточия, точки и знаки "минус" допустимы на имена XML. Символы Unicode могут также вызвать некоторое горе в C++, но это является главным образом зависящим от реализации.

[#x0300-#x036F] часть комбинирует диакритические знаки (diacriticals), который мог быть дополнительным беспокойством wrt равенство имени.

Так, нет никакого решения, которое ловит неалфавитные символы. <:::/> может быть похожим на смайлик, но это - правильно построенный XML. Для остальных Ваша идея в значительной степени в порядке. Идея Eric Melski является хорошей попыткой, но она принимает много неалфавитных символов. Например, foo[1] , &foo, *foo, foo=0 или foo,bar. Существует лучшая альтернатива: {using namespace name;}. Это примет foo::bar, но это на самом деле в порядке - нечто:: панель позволяется в XML.

2
ответ дан 15 December 2019 в 01:11
поделиться

Я думаю, что Ваша идея будет, вероятно, работать. Допустимые идентификаторы C++ составлены из A-Z, a-z, 0-9 и подчеркивания, которое является на самом деле собственным подмножеством идентификаторов XML (которые добавляют дефис, точка, и набор символов Unicode к набору).

Вы могли попробовать конструкцию как это для получения ошибки времени компиляции:

#define SAFE_BOOST_SERIALIZATION_NVP(name) \
    { int name = 0; } ; BOOST_SERIALZATION_NVP(name)

Фигурные скобки ограничивают объем фиктивной переменной только к, что строка, таким образом, Вы не создаете помехи своей функции поддельными переменными. Вероятно, компилятор оптимизирует фиктивную переменную также, таким образом, нет никакой стоимости во время выполнения. Когда я использую этот макрос в следующем коде, я добираюсь error: invalid intializer:

#include "boost/serialization/nvp.hpp"
#define SAFE_BOOST_SERIALIZATION_NVP(name) \
    { int name = 0; } ; BOOST_SERIALIZATION_NVP(name)

int main(int argc, char *argv[])
{
    int foo[3] = { 10, 20, 30 };
    int bar = 10;
    SAFE_BOOST_SERIALIZATION_NVP(foo[0]);
    return 0;
}

Если я заменяю foo[0] с bar в вызове к SAFE_BOOST_SERIALIZATION_NVP, это компилирует без ошибки.

1
ответ дан 15 December 2019 в 01:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: