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

Откуда: Крым, Севастополь.
Сообщений: 74
Есть табличка в которой помимо всяких данных есть и такие как
имя varchar(50) и лимит int
В имени нет пустых значений (NULL запрещен), а вот в лимите либо NULL либо 25
Надо в имени добавить в конце '(R)' если лимит = 25
вроде примитивный запрос:
UPDATE Articles 
SET Name = Name +'(R)' 
WHERE Limit=25

однако возникает ошибка №8152
Символьные или двоичные данные могут быть усечены.
Имена редко имеют длину 30 символов а уж тех которые больше 40 совсем единицы и в это условие они не попадают.
Что, так в лоб не получится? делать через временную табличку?
Выбрать во временную табличку идентификатор и имя + нужные мне символы потом обновить в целевой табличке данные данными из временной по идентификатору, стереть временную табличку.
11 май 12, 16:38    [12537867]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на обновление данных  [new]
Glory
Member

Откуда:
Сообщений: 104751
Ошибку наверное триггер выдает ?
Если внимательно прочитать текст ошибки ?
11 май 12, 16:41    [12537897]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на обновление данных  [new]
smallserg
Member

Откуда:
Сообщений: 82
BOBAHbI4,

Попробуйте сделать :
SET Name = ltrim(rtrim(Name)) +'(R)' 
11 май 12, 16:42    [12537904]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на обновление данных  [new]
BOBAHbI4
Member

Откуда: Крым, Севастополь.
Сообщений: 74
Glory
Ошибку наверное триггер выдает ?
Если внимательно прочитать текст ошибки ?

Триггера на обновление нет, есть только на удаление.
Справка про это сообщение пишет:
код серьезность запись в журнал текст сообщения
8152 16 Нет Символьные и двоичные данные могут усекаться.

Ничего не понятно, точнее понятно, что могут усекаться, но я о проверил, что мне длинны сроки хватает.
Копаю дальше пока не горит, если что сделаю через временную табличку или еще как нибудь. А хотелось по простому.
11 май 12, 16:57    [12538005]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на обновление данных  [new]
Glory
Member

Откуда:
Сообщений: 104751
BOBAHbI4
Триггера на обновление нет, есть только на удаление.
Справка про это сообщение пишет:
код серьезность запись в журнал текст сообщения
8152 16 Нет Символьные и двоичные данные могут усекаться.

Приведите лучше полный текст сообщения
11 май 12, 16:57    [12538009]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на обновление данных  [new]
BOBAHbI4
Member

Откуда: Крым, Севастополь.
Сообщений: 74
smallserg
BOBAHbI4,

Попробуйте сделать :
SET Name = ltrim(rtrim(Name)) +'(R)' 

Этот метод не помог, то же самое сообщение выдает.
Эти усечения пробелов стоят в процедуре добавления/изменения имени из клиентской программы. Так что их там быить не может все записи делаются через процедуры, непосредственно в табличку ни кто не пишет, запрещено это.
11 май 12, 16:59    [12538022]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на обновление данных  [new]
BOBAHbI4
Member

Откуда: Крым, Севастополь.
Сообщений: 74
Полный текст сообщения:
автор
Сообщение 8152, уровень 16, состояние 14, строка 1
Символьные или двоичные данные могут быть усечены.
Выполнение данной инструкции было прервано.
11 май 12, 17:02    [12538038]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на обновление данных  [new]
Glory
Member

Откуда:
Сообщений: 104751
BOBAHbI4
Полный текст сообщения:
автор
Сообщение 8152, уровень 16, состояние 14, строка 1
Символьные или двоичные данные могут быть усечены.
Выполнение данной инструкции было прервано.

Это вы делаете "Эти усечения пробелов стоят в процедуре добавления/изменения имени из клиентской программы." ?
11 май 12, 17:04    [12538057]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на обновление данных  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
BOBAHbI4
smallserg
BOBAHbI4,

Попробуйте сделать :
SET Name = ltrim(rtrim(Name)) +'(R)' 

Этот метод не помог, то же самое сообщение выдает.
Эти усечения пробелов стоят в процедуре добавления/изменения имени из клиентской программы. Так что их там быить не может все записи делаются через процедуры, непосредственно в табличку ни кто не пишет, запрещено это.


ну чтобы убрать все сомнения покажи результат
select 
COUNT(*)
from	Articles 
where len(Name)>47
11 май 12, 17:07    [12538073]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на обновление данных  [new]
Baddy
Member

Откуда: Харьков
Сообщений: 174
select max(DATALENGTH(Name)) from Articles where Limit=25
11 май 12, 17:10    [12538091]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на обновление данных  [new]
BOBAHbI4
Member

Откуда: Крым, Севастополь.
Сообщений: 74
в клиентской программе вызывается процедура ArticlesSet И там уже обработка имени отсекает начальные и конечные пробелы Trim'ами. Имя передается как один из параметров. Так сказать обработка ошибок пользователя если он набил пробелов в начале или в конце.
А сейчас я просто пишу запрос на обновление. И соответственно сам слежу, чтоб не натыкать лишних пробелов.
11 май 12, 17:11    [12538098]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на обновление данных  [new]
Glory
Member

Откуда:
Сообщений: 104751
BOBAHbI4
в клиентской программе вызывается процедура ArticlesSet И там уже обработка имени отсекает начальные и конечные пробелы Trim'ами. Имя передается как один из параметров. Так сказать обработка ошибок пользователя если он набил пробелов в начале или в конце.
А сейчас я просто пишу запрос на обновление. И соответственно сам слежу, чтоб не натыкать лишних пробелов.

Так где происходит _реальная_ ошибка то ?
11 май 12, 17:14    [12538119]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на обновление данных  [new]
BOBAHbI4
Member

Откуда: Крым, Севастополь.
Сообщений: 74
Все вопрос снимается!!!
Нашлась одна запись, на 48 символов, она то и не давал сработать запросу. Пришлось немного увеличит размер поля "Имя" и все сработало.
11 май 12, 17:21    [12538153]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на обновление данных  [new]
BOBAHbI4
Member

Откуда: Крым, Севастополь.
Сообщений: 74
Baddy
select max(DATALENGTH(Name)) from Articles where Limit=25

Именно этот метод помог, правда сам дошел, но ивам спасибо. Останется другим в помощь потом.
11 май 12, 17:23    [12538166]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить