Запрос на обновление SQL - вы не можете указать имена столбцов?

0

Можно ли написать инструкцию обновления и не указывать имена столбцов. Например

UPDATE tbl VALUES('1','2','3','4') WHERE id = 1;

Число значений всегда будет соответствовать количеству столбцов.

Спасибо заранее.

ИЗМЕНИТЬ

Я не знаю, что в столбце указано только количество столбцов.

Я знаю, что могу удалить строку, а затем сделать вставку, тогда идентификатор (который является A_I) не будет таким же.

Пожалуйста, помогите.

  • 0
    Что плохого в выполнении SELECT перед тем, как узнать имена столбцов?
  • 0
    Это было бы хорошо. Как узнать имена столбцов с помощью выбора.
Показать ещё 1 комментарий
Теги:

6 ответов

1
Лучший ответ

Вы можете получить список столбцов, используя:

SELECT  COLUMN_NAME 
FROM    INFORMATION_SCHEMA.COLUMNS C 
WHERE   TABLE_NAME = 'MyTable'

Это позволяет вам создать новый SQL-запрос, который проверяет значение в каждом столбце. Лучше всего сделать это в клиенте, например С#, Python или perl script.

2

Нет, это невозможно:

Синтаксис UPDATE

Если вы не знаете имена столбцов (что довольно странно), вы можете запросить информационную схему:

Таблицы INFORMATION_SCHEMA

1

... знаю, что я мог бы удалить строку, а затем сделать вставку, тогда идентификатор (который является A_I) не будет таким же...

Предполагая, что ваш первый столбец является AUTO_INCREMENT NOT NULL.

INSERT into tbl VALUES(NULL, val1, val2);
  • 0
    Мой вопрос говорит, не давая имена столбцов. Я не знаю имя столбца, поэтому не могу его указать.
  • 0
    Почему бы вам не дать название столбца? Если столбец будет перемещен, ваше приложение будет сломано.
Показать ещё 6 комментариев
0

Я не уверен, возможно ли это в простом SQL-запросе. Однако, если вы можете создать хранимую процедуру, то у вас есть параметры. Я не буду исследовать варианты, но вот пример.

Я знаю, что Oracle имеет метаданные, которые вы можете запросить, так что вы можете получить имена столбцов таблицы. (Я думаю, что SQL-сервер имеет нечто подобное)

Итак, поскольку вы можете запросить эти метаданные, вы можете пропустить имена столбцов, построить строку с именами столбцов для вашего оператора обновления и выполнить "выполнение" этой строки

У этого есть проблемы: - безопасность - SQL-инъекция возможна, поскольку вы создаете строку для выполнения. Возможно, вы можете использовать связанные переменные или параметризовать даже строку, которую вы создаете и запускаете - если вы создаете "жестко запрограммированный" пользовательский интерфейс, то в тот момент, когда таблица изменится и не будет иметь значения по умолчанию для новых столбцов или столбцы будут переупорядочены, он сломается. Однако, если вы создаете пользовательский интерфейс для чтения метаданных, а затем выполните одно и то же, чтобы создать строку для запуска, это должно быть хорошо.

0

Даже если это возможно, зачем вы хотите это сделать? Если вы хотите использовать ту же форму запроса для обновлений и вставок, вы можете использовать "replace to tbl_name (column_names...) values ​​(values ​​...)"

0

Никогда не пытайтесь это сделать.

Это сделает ваш код трудным для чтения и невозможно поддерживать.
Если вы позже измените столбцы своей таблицы, весь ваш код развалится, и поскольку у вас нет имен столбцов в коде, вы не сможете найти измененные столбцы и найти, где они используются.

  • 0
    Количество значений генерируется в зависимости от количества столбцов в таблице. Все столбцы varchar, кроме первого, и эта структура никогда не изменится.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню