Books and articles about SQL Rambler's Top100 Сменить язык на: Русский 29 March 2024 15:03:43


www.sql-ex.ru
Skip Navigation Links  

 

Print  Версия для печати

На главную страницу

SQL Server 2008: Инициализация табличных данных с помощью конструкторов строк

Louis Davidson (оригинал: 2008: Initializing Table Data with Row Constructors )
Перевод Моисеенко С.И.

Ну, я только что обнаружил эту особенность, главным образом, потому, что я никогда не встречал ее ни в одной из демо-сессий, которые я посещал до сих пор по 2008. Не то, чтобы это скрывалось - я видел такое название и прежде, но не проверял или не видел ничего выдающегося в том, что они "наконец" осуществили.

Сегодня вечером, а я работаю над главой, в которой создаю некоторые таблицы как часть большого примера, я взял код из книги в версии 2005 (первичный ключ добавляется к таблице позже в книге, так же как и остальные ограничения, посему не судите меня!):

 

CREATE TABLE Inventory.MovieRating (
       MovieRatingId             int NOT NULL,
       Code                           varchar(20) NOT NULL,
       Description                 varchar(200) NULL,
       AllowYouthRentalFlag bit NOT NULL
)
GO
INSERT INTO Inventory.MovieRating (MovieRatingId, Code, Description, AllowYouthRentalFlag)
VALUES (0, 'UR','Unrated',1)
INSERT INTO Inventory.MovieRating (MovieRatingId, Code, Description, AllowYouthRentalFlag)
VALUE   (1, 'G','General Audiences',1),
INSERT INTO Inventory.MovieRating (MovieRatingId, Code, Description, AllowYouthRentalFlag)
VALUES (2, 'PG','Parental Guidance',1),
INSERT INTO Inventory.MovieRating(MovieRatingId, Code, Description, AllowYouthRentalFlag)
VALUES (3, 'PG-13','Parental Guidance for Children Under 13',1),
INSERT INTO Inventory.MovieRating(MovieRatingId, Code, Description, AllowYouthRentalFlag)
VALUES (4, 'R','Restricted, No Children Under 17 without Parent',0)

 

Еще один способ:

 

INSERT INTO Inventory.MovieRating (MovieRatingId, Code, Description, AllowYouthRentalFlag)
SELECT 0, 'UR','Unrated',1
UNION ALL
SELECT 1, 'G','General Audiences',1
UNION ALL
SELECT 3, 'PG-13','Parental Guidance for Children Under 13',1
UNION ALL
SELECT 4, 'R','Restricted, No Children Under 17 without Parent',0

 

Но это ненамного лучше (точнее, немного лучше). Я чувствовал, что использование VALUES намного "правильнее" для книги. Однако сейчас в издании 2008 я очевидно должен буду изменить весь код на использование последнего и наилучшего синтаксиса, а именно, использование конструкторов строк, которые преобразуют код к следующему:

 

INSERT INTO Inventory.MovieRating (MovieRatingId, Code, Description, AllowYouthRentalFlag)
VALUES (0, 'UR','Unrated',1),
       (1, 'G','General Audiences',1),
       (2, 'PG','Parental Guidance',1),
       (3, 'PG-13','Parental Guidance for Children Under 13',1),
       (4, 'R','Restricted, No Children Under 17 without Parent',0)

 

И насколько это удивляет меня своей простотой и удобочитаемостью. (Использование конструкторов строк присутствовало еще в стандарте SQL-92 - прим. перев.) Полагаю, что я напечатал UNION ALL сотни, возможно, тысячи раз (ну, сотни ближе к истине) на форумах за прошлый год, и половину из них в целях создания данных для тех, кто просил помощи, но не нашел времени, чтобы самому сделать это для нас.

05-12-2007

На главную страницу

Print  Версия для печати


Usage of any materials of this site is possible
only under condition of mandatory allocation of the direct link to a site
http://www.sqlbooks.ru
on each page where used materials are placed.

 Main   Articles    Books 
Рейтинг@Mail.ru Rambler's Top100 Alt Упражнения по SQL: обучение, тестирование, сертификация по языку SQL Copyright c 2002-2006. All rights reserved.