Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Just_Serg Member Откуда: Сообщений: 498 |
Коллеги, доброго дня! Столкнулся с непонятным глюком. Пытаюсь вставить в некое поле таблицы наименование другой таблицы: insert into <таблица> select sysobjects.name ... В результате возникает ошибка "String or binary data would be truncated." Но весь прикол в том, что длина имени таблицы (строки, которую вставляю) - всего 20 символов, а длина поля таблицы, куда пытаюсь вставить - 35 символов. Сделал, вот так и "прокатило": insert into <таблица> select LEFT(sysobjects.name, 35) ... Т.е., получается обрезал значение длиной 20 символов до 35 символов )))))) select LEN(sysobjects.name) возвращает 20. Как вообще такое может быть? Может, кто-то сталкивался с подобным? |
27 апр 18, 16:48 [21374723] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8330 |
Just_Serg, а пробелы? Чудес не бывает. |
27 апр 18, 16:52 [21374728] Ответить | Цитировать Сообщить модератору |
Just_Serg Member Откуда: Сообщений: 498 |
Вот я про тоже, что не бывает чудес. Может, кто с таким сталкивался... Кстати, на другом сервере такой глюк не наблюдается - все отработало корректно. |
||
27 апр 18, 16:54 [21374734] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8330 |
Just_Serg, len(вставляемое значение+'a')? |
27 апр 18, 16:59 [21374749] Ответить | Цитировать Сообщить модератору |
Just_Serg Member Откуда: Сообщений: 498 |
21 |
||
27 апр 18, 17:04 [21374761] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37150 |
А на таблице, поди, триггер? |
27 апр 18, 17:10 [21374778] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11567 |
<таблица>.<field> покажите реально какой тип данных у вас, случаем не varchar(35) ? |
27 апр 18, 17:11 [21374785] Ответить | Цитировать Сообщить модератору |
Just_Serg Member Откуда: Сообщений: 498 |
да, именно varchar(35) К сообщению приложен файл. Размер - 2Kb |
||
27 апр 18, 17:17 [21374808] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11567 |
а sysobjects.name тип sysname |
27 апр 18, 17:19 [21374814] Ответить | Цитировать Сообщить модератору |
Just_Serg Member Откуда: Сообщений: 498 |
Нет, триггера нет |
||
27 апр 18, 17:20 [21374815] Ответить | Цитировать Сообщить модератору |
Just_Serg Member Откуда: Сообщений: 498 |
Т.е., нужно перед вставкой привести к типу varchar? Странно, что все это работало уже десяток лет и вдруг сломалось. |
||
27 апр 18, 17:22 [21374825] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11567 |
переносили базу на другой сервер с другим collation? |
27 апр 18, 17:27 [21374838] Ответить | Цитировать Сообщить модератору |
Just_Serg Member Откуда: Сообщений: 498 |
давно никаких телодвижений с базами не было. ... CAST(sysobjects.name as varchar) ... помогло т.е. получается, что проверке перед вставкой SQL Server считает что LEN(sysobjects.name) != LEN(CAST(sysobjects.name as varchar)) |
||
27 апр 18, 17:32 [21374849] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11567 |
потому что sysname = nvarchar(128) и у вас есть объекты с именами в юникоде, для обычных английских наименований будет всё равно |
27 апр 18, 17:35 [21374855] Ответить | Цитировать Сообщить модератору |
Just_Serg Member Откуда: Сообщений: 498 |
Спасибо большое! |
||
27 апр 18, 17:39 [21374869] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9636 |
|
||||||
27 апр 18, 18:14 [21374966] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |