#sql #sql-server-2005
#sql #sql-server-2005
Вопрос:
Как должна выглядеть моя SQL-инструкция (MS-SQL), если я не хочу вставлять строку в таблицу, которая содержит только один столбец с автоматически созданным идентификатором?
Следующие два запроса не будут работать:
INSERT INTO MyTable (MyTableId) VALUES (Null)
-- or simply
INSERT INTO MyTable
Спасибо за любые подсказки.
sl3dg3
Комментарии:
1. Зачем вам нужна таблица с одним столбцом, и этот столбец помечен как столбец идентификатора?
2. Подробнее о комментариях @Cybermate, почему вы хотите вставить в него 😉
3. @Cybernate — Это просто — для совместимости / переносимости с базой данных, работающей на Oracle, в которой нет столбцов идентификаторов (вместо этого используются последовательности). Таблица, подобная этой, может использоваться для эмуляции последовательности Oracle. Вам все равно придется немного изменить свой запрос для каждой платформы, но, по крайней мере, это (наряду с несколькими другими шагами) позволяет вашим определениям таблиц быть одинаковыми.
4. @Cybernate Это таблица, необходимая для языковых зависимостей… на самом деле, да, это происходит.
5. @Joel: «эмулировать последовательность Oracle».. Не могли бы вы, пожалуйста, объяснить?
Ответ №1:
INSERT INTO MyTable (MyTableId) VALUES (Null)
неявно пытается вставить значение null в столбец identity, так что это не сработает, поскольку столбцы identity никогда не могут быть обнуляемыми, а без параметра SET вы все равно не сможете вставить произвольное значение, вместо этого вы можете использовать:
INSERT INTO MyTable DEFAULT VALUES
Ответ №2:
Для полноты картины стандарт SQL и большинство баз данных поддерживают DEFAULT VALUES
предложение для этого:
INSERT INTO MyTable DEFAULT VALUES;
Это поддерживается в
- CUBRID
- Firebird
- H2
- HSQLDB
- Вход
- PostgreSQL
- SQLite
- SQL Server (ваша база данных)
- Sybase SQL Anywhere
Если вышеописанное не поддерживается, вы все равно можете написать это заявление в качестве обходного пути:
INSERT INTO MyTable (MyTableId) VALUES (DEFAULT);
Затем это также будет работать с:
- Доступ
- DB2
- MariaDB
- MySQL
- Oracle
Более подробную информацию смотрите в этом сообщении в блоге здесь:
http://blog.jooq.org/2014/01/08/lesser-known-sql-features-default-values/