Можно ли написать инструкцию обновления и не указывать имена столбцов. Например
UPDATE tbl VALUES('1','2','3','4') WHERE id = 1;
Число значений всегда будет соответствовать количеству столбцов.
Спасибо заранее.
ИЗМЕНИТЬ
Я не знаю, что в столбце указано только количество столбцов.
Я знаю, что могу удалить строку, а затем сделать вставку, тогда идентификатор (который является A_I) не будет таким же.
Пожалуйста, помогите.
Вы можете получить список столбцов, используя:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS C
WHERE TABLE_NAME = 'MyTable'
Это позволяет вам создать новый SQL-запрос, который проверяет значение в каждом столбце. Лучше всего сделать это в клиенте, например С#, Python или perl script.
Нет, это невозможно:
Если вы не знаете имена столбцов (что довольно странно), вы можете запросить информационную схему:
... знаю, что я мог бы удалить строку, а затем сделать вставку, тогда идентификатор (который является A_I) не будет таким же...
Предполагая, что ваш первый столбец является AUTO_INCREMENT NOT NULL.
INSERT into tbl VALUES(NULL, val1, val2);
Я не уверен, возможно ли это в простом SQL-запросе. Однако, если вы можете создать хранимую процедуру, то у вас есть параметры. Я не буду исследовать варианты, но вот пример.
Я знаю, что Oracle имеет метаданные, которые вы можете запросить, так что вы можете получить имена столбцов таблицы. (Я думаю, что SQL-сервер имеет нечто подобное)
Итак, поскольку вы можете запросить эти метаданные, вы можете пропустить имена столбцов, построить строку с именами столбцов для вашего оператора обновления и выполнить "выполнение" этой строки
У этого есть проблемы: - безопасность - SQL-инъекция возможна, поскольку вы создаете строку для выполнения. Возможно, вы можете использовать связанные переменные или параметризовать даже строку, которую вы создаете и запускаете - если вы создаете "жестко запрограммированный" пользовательский интерфейс, то в тот момент, когда таблица изменится и не будет иметь значения по умолчанию для новых столбцов или столбцы будут переупорядочены, он сломается. Однако, если вы создаете пользовательский интерфейс для чтения метаданных, а затем выполните одно и то же, чтобы создать строку для запуска, это должно быть хорошо.
Даже если это возможно, зачем вы хотите это сделать? Если вы хотите использовать ту же форму запроса для обновлений и вставок, вы можете использовать "replace to tbl_name (column_names...) values (values ...)"
Никогда не пытайтесь это сделать.
Это сделает ваш код трудным для чтения и невозможно поддерживать.
Если вы позже измените столбцы своей таблицы, весь ваш код развалится, и поскольку у вас нет имен столбцов в коде, вы не сможете найти измененные столбцы и найти, где они используются.