Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 непонятный глюк с "String or binary data would be truncated"  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: непонятный глюк с "String or binary data would be truncated"  [new]
Владислав Колосов
Member

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

а пробелы? Чудес не бывает.
27 апр 18, 16:52    [21374728]     Ответить | Цитировать Сообщить модератору
 Re: непонятный глюк с "String or binary data would be truncated"  [new]
Just_Serg
Member

Откуда:
Сообщений: 498
Владислав Колосов
Just_Serg,

а пробелы? Чудес не бывает.


Вот я про тоже, что не бывает чудес. Может, кто с таким сталкивался... Кстати, на другом сервере такой глюк не наблюдается - все отработало корректно.
27 апр 18, 16:54    [21374734]     Ответить | Цитировать Сообщить модератору
 Re: непонятный глюк с "String or binary data would be truncated"  [new]
Владислав Колосов
Member

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

len(вставляемое значение+'a')?
27 апр 18, 16:59    [21374749]     Ответить | Цитировать Сообщить модератору
 Re: непонятный глюк с "String or binary data would be truncated"  [new]
Just_Serg
Member

Откуда:
Сообщений: 498
Владислав Колосов
Just_Serg,

len(вставляемое значение+'a')?


21
27 апр 18, 17:04    [21374761]     Ответить | Цитировать Сообщить модератору
 Re: непонятный глюк с "String or binary data would be truncated"  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36928
А на таблице, поди, триггер?
27 апр 18, 17:10    [21374778]     Ответить | Цитировать Сообщить модератору
 Re: непонятный глюк с "String or binary data would be truncated"  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
<таблица>.<field> покажите реально какой тип данных у вас, случаем не varchar(35) ?
27 апр 18, 17:11    [21374785]     Ответить | Цитировать Сообщить модератору
 Re: непонятный глюк с "String or binary data would be truncated"  [new]
Just_Serg
Member

Откуда:
Сообщений: 498
Konst_One
<таблица>.<field> покажите реально какой тип данных у вас, случаем не varchar(35) ?


да, именно varchar(35)

К сообщению приложен файл. Размер - 2Kb
27 апр 18, 17:17    [21374808]     Ответить | Цитировать Сообщить модератору
 Re: непонятный глюк с "String or binary data would be truncated"  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
а sysobjects.name тип sysname
27 апр 18, 17:19    [21374814]     Ответить | Цитировать Сообщить модератору
 Re: непонятный глюк с "String or binary data would be truncated"  [new]
Just_Serg
Member

Откуда:
Сообщений: 498
Гавриленко Сергей Алексеевич
А на таблице, поди, триггер?


Нет, триггера нет
27 апр 18, 17:20    [21374815]     Ответить | Цитировать Сообщить модератору
 Re: непонятный глюк с "String or binary data would be truncated"  [new]
Just_Serg
Member

Откуда:
Сообщений: 498
Konst_One
а sysobjects.name тип sysname


Т.е., нужно перед вставкой привести к типу varchar?
Странно, что все это работало уже десяток лет и вдруг сломалось.
27 апр 18, 17:22    [21374825]     Ответить | Цитировать Сообщить модератору
 Re: непонятный глюк с "String or binary data would be truncated"  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
переносили базу на другой сервер с другим collation?
27 апр 18, 17:27    [21374838]     Ответить | Цитировать Сообщить модератору
 Re: непонятный глюк с "String or binary data would be truncated"  [new]
Just_Serg
Member

Откуда:
Сообщений: 498
Konst_One
переносили базу на другой сервер с другим collation?


давно никаких телодвижений с базами не было.

... CAST(sysobjects.name as varchar) ...

помогло

т.е. получается, что проверке перед вставкой SQL Server считает что LEN(sysobjects.name) != LEN(CAST(sysobjects.name as varchar))
27 апр 18, 17:32    [21374849]     Ответить | Цитировать Сообщить модератору
 Re: непонятный глюк с "String or binary data would be truncated"  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
потому что sysname = nvarchar(128) и у вас есть объекты с именами в юникоде, для обычных английских наименований будет всё равно
27 апр 18, 17:35    [21374855]     Ответить | Цитировать Сообщить модератору
 Re: непонятный глюк с "String or binary data would be truncated"  [new]
Just_Serg
Member

Откуда:
Сообщений: 498
Konst_One
потому что sysname = nvarchar(128) и у вас есть объекты с именами в юникоде, для обычных английских наименований будет всё равно


Спасибо большое!
27 апр 18, 17:39    [21374869]     Ответить | Цитировать Сообщить модератору
 Re: непонятный глюк с "String or binary data would be truncated"  [new]
invm
Member

Откуда: Москва
Сообщений: 9298
Konst_One
потому что sysname = nvarchar(128) и у вас есть объекты с именами в юникоде, для обычных английских наименований будет всё равно
Не смущает, что
https://docs.microsoft.com/en-us/sql/t-sql/data-types/nchar-and-nvarchar-transact-sql?view=sql-server-2017
Character data types that are either fixed-length, nchar, or variable-length, nvarchar, Unicode data and use the UNICODE UCS-2 character set.
https://docs.microsoft.com/en-us/sql/t-sql/data-types/nchar-and-nvarchar-transact-sql?view=sql-server-2017
nvarchar [ ( n | max ) ]
Variable-length Unicode string data. n defines the string length
?
27 апр 18, 18:14    [21374966]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить