Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Почему нет ошибки ?  [new]
Einsof
Member

Откуда:
Сообщений: 11
Сервер: Microsoft SQL Server Developer Edition (64-bit), version 9.00.5000.00
Почему вот такой код создания х.п. не вызывает ошибку:

create proc xaxa
as

begin
declare @ID int

exec sample_proc
@ID = @ID OUT,
@Brief = BLABLABLA ----- Что это ?

end

BLABLABLA без кавычек. За что ms sql принимает значение параметра @Brief ?
9 апр 13, 11:42    [14155581]     Ответить | Цитировать Сообщить модератору
 Re: Почему нет ошибки ?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Einsof
@Brief = BLABLABLA ----- Что это ?

При вызове процедуры это считается за строку 'BLABLABLA'. Такая вот недокументированная (вроде бы) фича.
9 апр 13, 11:56    [14155727]     Ответить | Цитировать Сообщить модератору
 Re: Почему нет ошибки ?  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
на самом деле, даже документированная, видимо:

Using Identifiers As Parameters in SQL Server

Many system stored procedures, functions, and DBCC statements take object names as parameters. Some of these parameters accept multipart object names, while others accept only single-part names. Whether a single-part or multipart name is expected determines how a parameter is parsed and used internally by SQL Server.

Single-part Parameter Names

If the parameter is a single-part identifier, the name can be specified in the following ways:
Without quotation marks or delimiters

...



не получится передать таким образом строку, содержащую недопустимые в идентификаторах символы.
и строку длиннее 128 символов.
create proc p1 @c varchar(8000) as
  select @c, len(@c)
go
exec p1 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

--Msg 103, Level 15, State 4, Line 1
--The identifier that starts with 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' is too long. Maximum length is 128.

go
drop proc p1
9 апр 13, 12:07    [14155813]     Ответить | Цитировать Сообщить модератору
 Re: Почему нет ошибки ?  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
в цитате, правда, говорится только о системных хранимых процедурах, не о пользовательских. но, видимо, как-то выделять их отдельно сочли излишним.
9 апр 13, 12:10    [14155837]     Ответить | Цитировать Сообщить модератору
 Re: Почему нет ошибки ?  [new]
Jovanny
Member

Откуда:
Сообщений: 1195
Т.е. не требуются кавычки для типа sysname.
9 апр 13, 12:55    [14156089]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить