
- •ГЛАВА 7 Команды
- •Обзор
- •alter database
- •alter role
- •alter table
- •begin...end
- •begin transaction
- •break
- •case
- •checkpoint
- •close
- •coalesce
- •commit
- •compute
- •connect to...disconnect
- •continue
- •create database
- •create default
- •create existing table
- •create function (SQLJ)
- •create index
- •create plan
- •create procedure
- •create procedure (SQLJ)
- •create proxy_table
- •create role
- •create rule
- •create schema
- •create table
- •create trigger
- •create view
- •dbcc
- •deallocate cursor
- •declare
- •declare cursor
- •delete
- •delete statistics
- •disk init
- •disk mirror
- •disk refit
- •disk reinit
- •disk remirror
- •disk unmirror
- •drop database
- •drop default
- •drop function (SQLJ)
- •drop index
- •drop procedure
- •drop role
- •drop rule
- •drop table
- •drop trigger
- •drop view
- •dump database
- •dump transaction
- •execute
- •fetch
- •goto label
- •grant
- •if...else
- •insert
- •kill
- •load database
- •load transaction
- •lock table
- •nullif
- •online database
- •open
- •order by
- •prepare transaction
- •quiesce database
- •raiserror
- •readtext
- •reconfigure
- •remove java
- •reorg
- •return
- •revoke
- •rollback
- •rollback trigger
- •save transaction
- •select
- •setuser
- •shutdown
- •truncate table
- •union
- •update
- •update all statistics
- •update partition statistics
- •update statistics
- •waitfor
- •where
- •while
- •writetext

|
ГЛАВА 7 Команды |
|
|
prepare transaction |
|
Описание |
Используется DB-Library в приложениях с двухфазной фиксацией |
|
транзакций; позволяет определить, готов ли сервер зафиксировать |
|
транзакцию. |
Синтаксис |
prepare tran[saction] |
Использование |
• Дополнительную информацию см. в книге Open Client DB-Library |
|
Reference Manual. |
Стандарты |
Уровень соответствия стандарту SQL92: расширение Transact-SQL. |
См. также |
Команды begin transaction, begin transaction, rollback, save transaction |
641

Описание |
Выводит пользовательское сообщение на экран. |
Синтаксис |
|
|
{строка_формата | @локальная_переменная | |
|
@@глобальная_переменная} |
|
[, список_аргументов] |
Параметры |
строка_формата |
|
Переменная или строка символов. Максимальная длина |
|
строки_формата – 1023 байта. |
|
Строки формата могут содержать до 20 уникальных указателей места |
|
подстановки в любом порядке. Когда текст сообщения будет отправ- |
|
лен клиенту, эти указатели места подстановки будут заменены форма- |
|
тированным содержимым аргументов, которые идут за строкой_ |
|
формата. |
|
Чтобы иметь возможность изменить порядок следования аргументов |
|
при переводе строк формата на язык с другой грамматической струк- |
|
турой, указатели места подстановки нумеруются. Указатель места |
|
подстановки для аргумента выглядит так: “ %nn !”– знак процента (%), |
|
за ним целое число от 1 до 20 и восклицательный знак (!). Целое число |
|
представляет номер аргумента в строке в списке аргументов. Напри- |
|
мер, “%1!” – это первый аргумент в первоначальной версии, “%2!” – |
|
второй аргумент и т.д. |
|
Обозначение позиции аргумента таким способом позволяет правильно |
|
перевести текст, даже если порядок аргументов в целевом языке отли- |
|
чается. |
|
Возьмем такое сообщение на английском: |
|
%1! is not allowed in %2!. |
|
Немецкая версия этого сообщения выглядит так: |
|
%1! ist in %2! nicht zulassig. |
|
@локальная_переменная |
|
Должна иметь тип char, nchar, varchar или nvarchar и должна быть |
|
объявлена в пакете или процедуре, в которой используется. |
|
@@глобальная_переменная |
|
Должна иметь тип char или varchar или допускать автоматическое |
|
преобразование к этим типам (например @@version). В данный |
|
момент @@version – это единственная глобальная переменная |
|
символьного типа. |
642

ГЛАВА 7 Команды
список_аргументов
|
Может быть последовательностью переменных или констант, разде- |
|
ленных запятыми. список_аргументов необязателен, если не указана |
|
строка формата, содержащая указатели места подстановки вида |
|
“%nn !”. Если строка формата содержит указатели места подстановки, |
|
то список_аргументов должен содержать количество аргументов, |
|
соответствующее максимальному номеру указателя места подстанов- |
|
ки. Аргумент может быть любого типа данных, кроме text или image; |
|
перед включением в конечное сообщение он преобразуется в сим- |
|
вольный тип. |
Примеры |
Пример 1. Печать строки “Berkeley author”, если автор из таблицы authors |
|
проживает в области с почтовым индексом (столбец postacode) 94705: |
|
if exists (select postalcode from authors |
|
where postalcode = '94705') |
|
print "Berkeley author" |
|
Пример 2. Объявление переменной, присвоение ей значения и его вывод |
|
на экран: |
|
declare @msg char(50) |
|
select @msg = "What's up, doc?" |
|
print @msg |
|
What's up, doc? |
|
Пример 3. Использование переменных и указателей места подстановки в |
|
сообщениях: |
|
declare @tabname varchar(30) |
|
select @tabname = "titles" |
|
declare @username varchar(30) |
|
select @username = "ezekiel" |
|
print "The table '%1!' is not owned by the user '%2!'.", |
|
@tabname, @username |
|
The table 'titles' is not owned |
|
by the user 'ezekiel'. |
Использование |
• Максимальная длина выводимой строки_формата (со всеми |
|
аргументами после подстановки) равна 1024 байтам. |
|
• Если строка формата содержит указатель места подстановки с |
|
номером n, то в этой же строке должны присутствовать указатели |
|
места подстановки с номерами от 1 до n- 1, хотя и не обязательно в |
|
порядке номеров. Например, недопустимо, чтобы в строке формата |
643

были указатели места подстановки 1 и 3, но не было указателя места подстановки 2. Если в строке формата пропущен номер, то при выполнении команды print будет выдано сообщение об ошибке.
• список_аргументов должен содержать аргумент для каждого указа- теля места подстановки в строке_формата, иначе выполнение тран- закции будет прекращено. Аргументов может быть больше, чем указа- телей места подстановки.
• Чтобы вставить знак процента в сообщение об ошибке, в строке_ формата нужно указать два знака процента (‘‘%%’’). Если строка_ формата содержит один знак процента (‘‘%’’), который не исполь зуется как указатель места подстановки, то будет возвращено сообщение об ошибке.
• Если аргумент принимает значение NULL, то он преобразуется в символьную строку нулевой длины. Чтобы избежать вывода строк нулевой длины, используется функция isnull. Например, если аргумент @arg имеет значение NULL, то следующий оператор выдает сообщение "I think we have nothing here.":
declare @arg varchar(30)
select @arg = isnull(col1, "nothing") from table_a where ...
print "I think we have %1! here", @arg
• Пользовательские сообщения можно добавлять в системную таблицу
|
sysusermessages, чтобы использовать их в любом приложении. Для |
|
добавления сообщений в таблицу sysusermessages используется |
|
системная процедура sp_addmessage, а для извлечения сообщений |
|
для команд print и raiserror – процедура sp_getmessage. |
|
• Чтобы вывести определенное пользователем сообщение об ошибке |
|
и сохранить номер ошибки в переменной @@error, нужно исполь- |
|
зовать команду raiserror, а не print. |
Стандарты |
Уровень соответствия стандарту SQL92: расширение Transact-SQL. |
Полномочия |
Команду print по умолчанию могут выполнять все пользователи. Для этого |
|
не требуется никаких полномочий. |
См. также |
Команды declare, raiserror |
|
Системные процедуры sp_addmessage, sp_getmessage |
644