Опубликован: 11.12.2006 | Доступ: свободный | Студентов: 5820 / 381 | Оценка: 4.42 / 3.86 | Длительность: 57:15:00

Лекция 20: Расширенное описание T-SQL

Аннотация: Более углубленное изучение T-SQL продолжается в этой лекции. Рассматриваются новые конструкции: IF...ELSE, WHILE и CASE. Новые операторы, ранее не задействованные в примерах. Примеры и дополнительная информация, в сочетании со справочной системой SQL Server (Books Online) эффективно помогут вам разобраться во всех тонкостях нового материала.

Мы познакомились с этими операторами в предыдущих лекциях. Здесь также описываются ключевые слова 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.