Программирование баз данных MS SQL Server (1084479), страница 26
Текст из файла (страница 26)
Основная часть операций вставки, которые будут описаны в этой главе, относится к таблице згогез (это — очень аккуратная и простая таблица, с которой удобно начать), поэтому рассмотрим свойства этой таблицы (рис. 3З). Для этого в окне ОЬ!ес1 Ехр!огег программы Мапабешепг Ягпс1го разверните узел ТаЫез, относящийся к базе данных рпЬЯ. После этого разверните также узел Со(пгппз (см. рис. 3.3). Очевидно, что в этой таблице каждый столбец имеет тип сЬаг или чагспаг. В первом примере применения операции вставки исключим необязательный список столбцов и предоставим СУБД ЯО1. Яегчег возможность действовать исходя из предположения, что какоето значение предусмотрено для кзлсдого столбца: 1НЯЕНТ 1НТО зсогез ЧАЕНЕЯ ('ТЕНТ', 'Тезс Ясоге', '1234 Апучьеге Ясгеес', 'Неге', 'Нт', '00319') 110 Глава 3 а Яа тлею й П) вувею таь)м й П аю.ильес а П вюлиаасе й П тяоюе(яууее й И) вю.ыю и П сую.вь его й П Вю вймюге й П аю.гасасйед а П аюевм и И аю,коссе и Яа Оаоесе $-' стог с) (РГ, дюг('О, оя ва — «ог оеаеаагйас(Ю), юя) (р) сее амыс Эагсрахаа), сот) а) иу(уюсью(20) гаэ П иве (всаг(2), югв Щ ар (Вюг(я), гюу) а И пюс ю рву е Рис.
З..у. Сяисвк свмлбцов таблицы я кохая Как было сказано выше, если отдельный список столбцов не предусмотрен (вскоре будет описано, как предусмотреть в операторе список столбцов), то все значения должны быть заданы в том же порядке, в каком определены соответствующие им столбцы в таблице. После выполнения этого запроса должно появиться сообщение о том, что данный запрос оказал воздействие на одну строку. А теперь, ради интереса, попытаемся выполнить точно такой же запрос во второй раз.
Будет получено следующее сообщение об ошибке: Мвд 2627, Ьесге1 14, зевсе 1, Ьгпе 1 Ч1о1ас1оп оу РН1иаку КЕу сопвсгатпс 'НРК всоге1с)'. Саппос гпяегс с)пр11саге Хеу 1п оЬ3есс 'с(Ьо.ясогея'. Тье всасевепс Ьвв Ьееп Гегв1пасес). Очевидно, что запрос был выполнен успешно в первый раз, но не во второй. Причина этого состоит в том, что на данной таблице задан первичный ключ, который не допускает появления дубликатов значений в столбце ятог ЬсЬ А если бы было изменено значение только в одном поле, соответствующем этому столбцу, то можно было бы оставить неизменными значения всех других полей, и вставка новой строки была бы выполнена успешно.
Дополнительные сведения о первичных ключах приведены в тех главах, в которых рассматриваются вопросы проектирования и ограничения целостности. С помощью следующего запроса рассмотрим, к чему привело выполнение оператора вставки: ЯЕЬЕСТ * РНОМ ясогев ХНЕНЕ всог 1с) = 'ТЕЯТ' Выполнение этого запроса приводит к получению именно тех данных, которые были вставлены в таблицу: вгог ас)пгевв вгог 1с( ясог паве отсу ясасе гар 1234 Лпуюьеге Ясгеес Неге Ну 00319 ТЕЯТ Теяс Ясоге (1 тою(в) аггессес)) Основные операторы языка Т-ВЯЬ 111 Следует отметить, что в конце каждого столбца в этом листинге было удалено несколько пробелов, чтобы результаты аккуратно разместились на странице, но это не повлияло на представление самих данных, которые полностью соответствуют нашим ожиданиям.
Теперь еще раз попытаемся выполнить тот же запрос после внесения в него изменений, касающихся отдельных столбцов: 1НЯЕНт 1ктс воогев (воог То, всог оаае, стоу, вовсе, ггр) УЛЬНЕЯ ( татг , т Г. ЯГ е, Н ', 'НХ', '00919') Обратите внимание на то, что в строке со значениями данных изменены только два элемента. Во-первых, модифицировано значение, вставляемое в столбец первичного ключа, чтобы не вырабатывалась ошибка. Во-вторых, оставлено пустым значение, которое должно быть связано со столбцом всог аг(бгевв, поскольку имя этого столбца исключено из списка столбцов. Исключать столбец из списка столбцов и не предоставлять для него никаких данных в операторе 1МБЕЕТ допускается в нескольких ситуациях.
Но в данный момент мы лишь пользуемся тем фактом, что столбец вгог аг(аггея в не является обязательным, иными словами, он допускает наличие )г)ЫЬЬ-значений. В данном случае значение для столбца не предоставляется, а заданное по умолчанию значение для него не предусмотрено (дополнительные сведения о значениях, предусмотренных по умолчанию, будут приведены ниже), поэтому соответствующему полю столбца вгог аоогевв при выполнении данного оператора вставки будет присвоено )г)УЬЬ-значение.
Проверим, так ли это, повторно выполнив тот же проверочный оператор БЕЕЕСТ с одним небольшим изменением, касающимся значения первичного ключа: яеьест * гаом всогев ННЕНЕ всог 10 = 'ТЯТ2' Теперь полученные данные выглядят немного иначе: вгаге ггр вгог аоогевв вгог Тс( отсу вгог паве ТЯТ2 Тевс ЯГоге ННЫ. Неге МХ 00319 (1 гов(в) вГГесгея) Обратите внимание на то, что вместо пропущенного значения поля вставлено М(Л.Е. Следует отметить, что описанные выше действия можно выполнять только по отношению к столбцам, принимающим неопределенные значения.
Такая характеристика столбца в основном не требует пояснений и просто означает, что в данном столбце допускается наличие ХЫЬЬ-значений. Вопросы использования неопределенных значений (Х1)ЬЬ-значений) будут подробно рассмотрены в следующих главах, поэтому сейчас лишь отметим, что одни столбцы допускают наличия в них )ч г)ЬЬ- значений, а другие — нет. А что касается столбцов, допускающих наличие )г)ЫЬЬ-значений, то всегда возможно не предоставлять для них информацию, вставляя данные в другие столбцы.
112 Глава 3 Исключительно ради полноты описания рассмотрим еще один оператор 1??БЕЕТ. Но на этот раз речь идет о вставке информации о новой торговой сделке в таблицу яа1ея. Для просмотра свойств таблицы яа1ея можно либо открыть относящееся к ней окно Ргорег11ев, как в описанном выше случае с таблицей апогея, либо вызвать на выполнение системную хранимую процедуру яр Ле1р. С помощью процедуры зр Ье1р может быть получена информация о любом объекте базы данных, типе данных, определяемом пользователем, или о типе данных ЯЯ?.
Бегуег. Синтаксис оператора вызова процедуры яр Ье1р является следующим: ЕХЕС яр Ье1р <паве> Поэтому для просмотра свойств таблицы эа1ея достаточно ввести следующую команду в программе (~негу Апа?угег: ЕХЕС яр Ье1р яа1ея Выполнение этой команды приведет к получению, в частности, таких результатов: Со1ьвп паве Ьепосп Нп11аЬ1е Туре ясог гб огб ппв огб басе чгу раугегвя Г1Г1е ?б спаг чагопаг басеГ1ве ягаа111пг чагопаг г1б 4 20 8 2 12 б по по по по по по Таблица яа1ея включает шесть столбцов, но особого внимания читателя заслуживают столбцы с?гу и огб баге, поскольку они имеют типы, которые нам еще не приходилось применять в операторах вставки до этого момента (столбец г1?1е Тс? относится к типу Г?б, но фактически это просто тип, определяемый пользователем, который представляет собой символьный тип длиной б).
Но если столбец не принимает неопределенное значение, то должно соблюдаться одно из трех перечисленных ниже условий, поскольку в противном случае будет получено сообщение об ошибке, а оператор 1??ВЕЕТ отверги)гп Столбец определен со значением, заданным по умолчанию. Значение, заданное по умолчанию, представляет собой постоянное значение, вставка которого выполняется, если не предусмотрено какое-либо другое значение. Информация о том, как определять значения, заданные по умолчанию, приведена в главе 7. С? Столбец определен как предназначенный для получения значения, вырабатываемого системой в той или иной форме.
Наиболее часто таковым является значение 10Е??Т1ТУ (рассматриваемое более подробно в главе, посвященной проектированию). Заполняя этот столбец, система, как правило, начинает отсчет в первой строке с 1, увеличивает это значение до 2, заполняя вторую строку, и т.д. Значения 1РЕ??Т1Ту фактически нельзя рассматривать как "номера строк", поскольку в дальнейшем строки могут быть удаленьь а при определеннгах обстоятельствах происходит пропуск некоторых из этих значений, т.е.
строго последовательная нумерация нарушается, но они оправдывают свое назначение в том, что обеспечивают наличие в каждой строке ее собственного уникального идентификатора. Сз Для столбца задается значение. Основные операторы языка Т-БОБ 113 Отличительной особенностью данного запроса является то, что он показывает, в каком формате следует представлять данные, вводимые в базу данных с учетом их типа. В частности, при вводе числовых значений не должны использоваться кавычки, как при вводе символьных данных.
Но для данных типа с[асес1те кавычки требуются (на самом деле, эти данные вводятся в виде строковых, а затем преобразуются в данные типа <[агес1те). 1МЯЕЕТ 1ИТО эа1еэ (эспг 1с[, пгс) ппт, огп папе, я<у, рау<егтз, <1<1е ТО) ННЬЗЕЯ ('ТЕЯТ', 'ТЕЯТОЕОЕЕ', '01/01/1999', 10, 'ИЕТ 30', 'З01032') После ввода этого запроса появляется уже знакомое нам сообщение "(1 гон(э) аггессес[) Ь ,след)(етчзтметитьз что в лайиом прймере: иойолйаовалов формат ииуоаутттт, который, широко раепрйотрвяеи в Сйя> ио, с одииаковым у(олахем мои>иа';применять и многйе дру.
,.'гие форматы (например, более,"'чаете вртречающийея ае'.многих странах мира формат::. . Тттт'-'иэ)-оо)( на сервере иороллзуетеязадаиире лолумоя<чаниф значение.<ормата,, ае=- ..':ейаяще>Е, 'оттого,: быда: ли оразу цриебратвиа "локализованная< келия СТБД$ОБ Залег или' значение:этого лараметра: быи>о изменено иа" оервере, Оператор певиц про... зжьжст Безусловно, режим работы, при котором происходит единовременно вставка только одной строки, вполне приемлем и удобен, но иногда возникает необходимость во вставке целого блока данных.