Россия, г. Санкт-Петербург |
Лекция 20: Расширенное описание T-SQL
Мы познакомились с этими операторами в предыдущих лекциях. Здесь также описываются ключевые слова T-SQL, используемые для управления последовательностью выполнения операторов. Вы можете использовать эти операторы и ключевые слова в любом месте, где применяется T-SQL, – в командных строках, сценариях, хранимых процедурах, в пакетных заданиях и прикладных проблемах. В частности, мы рассмотрим операторы обработки данных INSERT, UPDATE и DELETE (см. "лекцию 13" ), а также программные конструкции IF...ELSE, WHILE и CASE.
Прежде чем перейти к нашей основной теме, мы создадим таблицу items для использования в наших примерах. (Мы создадим эту таблицу в базе данных MyDB.) Ниже приводятся операторы T-SQL, используемые для создания таблицы items:
USE MyDB GO CREATE TABLE items ( item_category CHAR(20) NOT NULL, item_id SMALLINT NOT NULL, price SMALLMONEY NULL, item_desc VARCHAR(30) DEFAULT 'No desc' ) GO
Колонка item_id могла бы вполне подойти для свойства IDENTITY. (См. раздел "Добавление свойства IDENTITY" в "лекции 10" ). Но поскольку вы не можете явным образом помещать значения в такую колонку, то мы не используем здесь свойство IDENTITY. В данном случае мы будем использовать более гибкий подход в примерах, где используется оператор INSERT.
Оператор INSERT
Оператор INSERT, введенный в "лекции 13" , используется для добавления новой строки или строк в таблицу или представление. Ниже показан основной синтаксис для оператора INSERT:
INSERT [INTO] имя_таблицы [(список_колонок)] VALUES выражение | производная_таблица
Ключевое слово INTO и параметр список_колонок не являются обязательными. Параметр список_колонок указывает, в какие колонки вы помещаете данные; эти значения имеют взаимно-однозначное соответствие (по порядку) со значениями, указанными в выражении (которое может быть просто списком значений). Рассмотрим некоторые примеры.
Вставка строк
В следующем примере показано, как вставить одну строку данных в таблицу items:
INSERT INTO items (item_category, item_id, price, item_desc) VALUES ('health food', 1, 4.00, 'tofu 6 oz.') GO
Поскольку мы задали значения для каждой колонки данной таблицы и перечислили эти значения в порядке соответствующих колонок таблицы, то можно было бы совсем не использовать параметр список_колонок. Но если бы значения были заданы не в порядке колонок, то вы получили бы неверные данные или появилось бы сообщение об ошибке. Например, если запустить следующую последовательность операторов, то вы получите сообщение об ошибке, указанное после этой последовательности:
INSERT INTO items VALUES (1, 'health food', 4.00, 'tofu 6 oz.') GO Server: Msg 245, Level 16, State 1, Line 1 Syntax error converting the varchar value 'health food' to a column of data type smallint. (Синтаксическая ошибка в результате преобразования varchar-значения 'health food' в колонке данных типа smallint)
Невыполнение вставки строки и это сообщение являются следствием неверного порядка значений Мы пытались поместить значение item_id в колонку item_category и значение item_category в колонку item_id. Указанные значения несовместимы с типами данных для этих колонок. Если бы они были совместимы, то SQL Server позволил бы вставить данную строку независимо от порядка следования значений.
Чтобы увидеть, как выглядит строка, которую мы вставили в таблицу, укажите запрос выбора всех строк таблицы с помощью следующего оператора SELECT:
SELECT * from items GO Вы получите следующий набор результатов: item_category item_id price item_desc ------------------------------------------------------- health food 1 4.0000 tofu 6 oz.
При создании таблицы items было определено, что колонка price (цена) может содержать пустые значения, а для колонки item_desc (описание) было задано значение по умолчанию No desc. (Нет описания). Если в операторе INSERT не указано никакого значения для колонки price, то в эту колонку для новой строки будет помещено значение NULL. Если не указано никакого значения для колонки item_desc, то в эту колонку для новой строки будет помещено значение No desc.