У меня есть таблица с 42 полями. Однако большинство из них примерно одинаковы. У меня есть 20 полей с именем a01
до a20
и еще 20, которые называются b01
- b20
. Остальные 2 - это ПК и ФК.Есть ли способ сократить запрос с большим количеством полей?
Есть ли способ сократить запрос INSERT
? Прямо сейчас, из-за ПК, я должен указать, какие столбцы Я использую, например:
INSERT INTO Table01 (col_FK, a01, b01, a02, b02.....(etc)
Однако реальная проблема я имею мой SELECT
запрос. Мой запрос в основном позволяет пользователю искать одно или несколько полей и иметь NULL в качестве сравнения, если поле остается пустым.
SELECT * FROM Table01 WHERE
(@col_FK IS NULL OR col_FK LIKE @col_FK)
AND (@a01 IS NULL OR a01 LIKE @a01)
AND (@b01 IS NULL OR b01 LIKE @b01)
etc...
Так, например, если я только вошел кое-что, чтобы a01
и оставил остальное пусто, то запрос будет выглядеть следующим образом:
SELECT * FROM Table01 WHERE
(NULL IS NULL OR col_FK LIKE NULL)
AND ('text' IS NULL OR a01 LIKE 'text')
AND (NULL IS NULL OR b01 LIKE NULL)
etc...
Я действительно не хотят должны делать это для всех 40 полей, так ли я мог бы сделать это короче?
Примечание: факторинга выше (@a01
, @b01
) делается в C#, так что я могу передать параметры в запросе.
Как вы узнаете, какое поле пользователь хочет найти? Или это всего лишь запрос типа «тип что-то и посмотреть, появляется ли он в любом из полей»? –
@ Я думаю, что происходит, если я ищу столбец 'a01', остальная часть запроса будет сравниваться с' NULL'.Например, это будет что-то вроде: 'SELECT * FROM Table01 WHERE (NULL NULL ИЛИ col_FK LIKE NULL) AND ('text' IS NULL ИЛИ a01 LIKE 'text') и т. Д.' – Ben
Да, я понимаю, но мой вопрос в том, как вы заполняете или передаете '@ a01'? У вас есть 40 текстовых полей/входов? Я пытаюсь понять, что если запрос выполняется с C#, вы можете динамически создать строку запроса только с значениями, которые вы хотите сравнить, но мне нужно знать, откуда берутся значения, чтобы увидеть если это возможно. –