2014-10-21 7 views
0

Я использую следующий скрипт для создания объектов в C# из Oracle, и он работает нормально.Как пропускать вывод столбца на основе значения?

select 'yield return new Question { QuestionID = '||Q.questionid||', Qcode = "'||Q.Qcode||'", QuestionDescription = "'||Q.questiondescription||'", QuestionText = "'||Q.questiontext||'", QuestionCategoryId = '||Q.questioncategoryid||', QuestionTypeID = '||Q.QuestionTypeID||', IsThunderheadOnly = '|| case q.isthunderheadonly when 0 then 'false' else 'true' end ||', DisplayOrder = '||q.displayorder||' };' 
    from QUESTION q 
where 
questioncategoryid = 7 

Однако снова и снова я бегу в проблему, когда я не || может добавить столбцы с NULL значениями и решение этой точки было добавление этих свойств вручную, что было нормально при выборе до 20 записей.
Теперь я столкнулся с ситуацией, когда вам нужно выбрать сотни записей, и их добавление вручную потребует значительного количества времени.

Как я могу изменить скрипт, чтобы добавить (пример) MaxValue свойство, если столбец в таблице NOT NULL, но пропустите его, если это так?

ответ

2

Вы можете пропустить его case ... when ... else как вы выяснили сами:

... ||case when A.NEXTQUESTIONID is not null then 'NextQuestionID = '||A.NEXTQUESTIONID||',' else '' end || ... 

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

... || nvl2(A.NEXTQUESTIONID, 'NextQuestionID = '||A.NEXTQUESTIONID||',', '') || ... 
+0

понял это сам с утверждением Case. :) '' new Answer {DisplayOrder = '|| A.DISPLAYORDER ||', Text = "'|| A.TEXT ||'" '|| CASE, КОГДА A.NEXTQUESTIONID не является NULL THEN', NextQuestionID = '| | A.NEXTQUESTIONID ELSE '' END || ' } ' 'не могли бы вы поместить его в свой ответ. –

+0

@ LIUFA сделано. Но, возможно, функция nvl2 выглядит лучше для вас;) – UniversE

+0

Я использую nvl2, его просто было стыдно выбрасывать мое собственное решение, когда оно было уже сделано, когда я пришел сюда, и ответить себе, когда ответ уже был здесь. были неправы. :) –

Смежные вопросы