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

Откуда: Kiev
Сообщений: 85
При исполнении следующей функции ошибок не показывает, но записи не врзвращаются. Целью использования оператора Left в данном случае есть стирание последнего символа (запятой) в записи, которая возвращается.
Интересное замечание: когда возвращаются небольшие записи, то она вроде бы работает. Возможно, я напутал что-то с типом поля, которое передаю этому оператору. Может кто-нибуть сталкивался с подобной проблемой?

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO


USE WP
GO

ALTER FUNCTION dbo.GetDescription(@id INTEGER)
RETURNS NVARCHAR(100)
AS
BEGIN
DECLARE @Result NVARCHAR(4000)

SET @Result = ''
SELECT @Result = @Result + '(' + [CITY_CODE] + ')' + [PHONE_NUMBER] + ',' FROM WC_PHONES WHERE [CLIENT_ID] = @id

set @Res = left(@Result, len(@Result)-1)

RETURN RTRIM(@Result) + ''
END


GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
23 мар 05, 15:09    [1409060]     Ответить | Цитировать Сообщить модератору
 Re: Оператор left работает нестабильно  [new]
zass
Member

Откуда: Minsk
Сообщений: 1043
Left - возвращает указанное количество символов строки начиная с самого левого символа.
23 мар 05, 15:11    [1409083]     Ответить | Цитировать Сообщить модератору
 Re: Оператор left работает нестабильно  [new]
iSestrin
Member

Откуда: Новосибирск
Сообщений: 3811
где и как описано @Res ?
23 мар 05, 15:12    [1409089]     Ответить | Цитировать Сообщить модератору
 Re: Оператор left работает нестабильно  [new]
wh
Member

Откуда: Kiev
Сообщений: 85
Пардон, там не @Res, а @Result. Но сть не меняется.
23 мар 05, 15:15    [1409104]     Ответить | Цитировать Сообщить модератору
 Re: Оператор left работает нестабильно  [new]
iSestrin
Member

Откуда: Новосибирск
Сообщений: 3811
значит оно недостаточной длины ...
23 мар 05, 15:19    [1409136]     Ответить | Цитировать Сообщить модератору
 Re: Оператор left работает нестабильно  [new]
Glory
Member

Откуда:
Сообщений: 104760
RETURNS NVARCHAR(100)
и
DECLARE @Result NVARCHAR(4000)

тоже описка ?
23 мар 05, 15:28    [1409205]     Ответить | Цитировать Сообщить модератору
 Re: Оператор left работает нестабильно  [new]
Vanek
Member

Откуда: Kyiv
Сообщений: 49
RETURNS NVARCHAR(100)
AS
BEGIN
DECLARE @Result NVARCHAR(4000)

Почему
23 мар 05, 15:28    [1409206]     Ответить | Цитировать Сообщить модератору
 Re: Оператор left работает нестабильно  [new]
BrokenPot
Member

Откуда: Киев
Сообщений: 1405
set @Res = left(@Result, len(@Result)-1)

наверно, -1 должен быть внутри скобки

set @Res = left(@Result, len(@Result)-1)

?
23 мар 05, 15:31    [1409227]     Ответить | Цитировать Сообщить модератору
 Re: Оператор left работает нестабильно  [new]
BrokenPot
Member

Откуда: Киев
Сообщений: 1405
Ой : set @Res = left(@Result, len(@Result-1)) :)
23 мар 05, 15:35    [1409259]     Ответить | Цитировать Сообщить модератору
 Re: Оператор left работает нестабильно  [new]
BrokenPot
Member

Откуда: Киев
Сообщений: 1405
И как мне теперь удалить все это мое безобразие? :)
23 мар 05, 15:38    [1409274]     Ответить | Цитировать Сообщить модератору
 Re: Оператор left работает нестабильно  [new]
AAron
Member

Откуда: Москва
Сообщений: 4324
SELECT @Result = @Result + '(' + [CITY_CODE] + ')' + [PHONE_NUMBER] + ',' FROM WC_PHONES WHERE [CLIENT_ID] = @id

А здесь не может быть NULL-значения в полях CITY_CODE или PHONE_NUMBER?

Как трактовать "но записи не врзвращаются"?
23 мар 05, 17:33    [1409942]     Ответить | Цитировать Сообщить модератору
 Re: Оператор left работает нестабильно  [new]
wh
Member

Откуда: Kiev
Сообщений: 85
Да, вот именно! Когда [CITY_CODE]=NULL, то оно вообще ничего не возвращает :(
Как мне сделать так, чтобы оно возвращало значение PHONE_NUMBER, если даже [CITY_CODE]=NULL?

Для припоминания :)
SELECT @Result = @Result + '(' + [CITY_CODE] + ')' + [PHONE_NUMBER] + ',' FROM WC_PHONES WHERE [CLIENT_ID] = @id
23 мар 05, 17:47    [1409988]     Ответить | Цитировать Сообщить модератору
 Re: Оператор left работает нестабильно  [new]
Smirnov Anton
Member

Откуда: Н.Новгород
Сообщений: 3220
SELECT @Result = @Result + isnull('(' + [CITY_CODE] + ')','') + [PHONE_NUMBER] + ',' FROM WC_PHONES WHERE [CLIENT_ID] = @id
23 мар 05, 17:49    [1409996]     Ответить | Цитировать Сообщить модератору
 Re: Оператор left работает нестабильно  [new]
Vanek
Member

Откуда: Kyiv
Сообщений: 49
Заменить [CITY_CODE] на
ISNULL([CITY_CODE],'')
23 мар 05, 17:50    [1410002]     Ответить | Цитировать Сообщить модератору
 Re: Оператор left работает нестабильно  [new]
wh
Member

Откуда: Kiev
Сообщений: 85
Ага, получилось) Спасибо БОЛЬШОЕ!
23 мар 05, 17:54    [1410019]     Ответить | Цитировать Сообщить модератору
 Re: Оператор left работает нестабильно  [new]
wh
Member

Откуда: Kiev
Сообщений: 85
Да, кстате,
set @Result = left(@Result, len(@Result)-1)

не работает потому, что @Result не содержит символов, соответственно,
len(@Result)-1 возвращает ошибку. А решил я эту проблему не мудрено:

IF len(@Result) > 1
set @Result = left(@Result, len(@Result)-1)

:)
23 мар 05, 18:02    [1410050]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить