System.Data.SqlClient.SqlException: строка или двоичные данные будут усечены

Я создаю веб-приложение, в котором я выполняю команду выбора для моей хранимой процедуры, но я хочу вставить те же извлеченные данные в другую таблицу.

Поэтому я попытался сделать что-то вроде следующего

CREATE PROCEDURE profinalinstexpensesonid  
    (@from varchar(5000),                
     @to varchar(5000),                
     @trainer varchar(5000),  
     @sonvinid varchar(5000)              
    )            
AS                
BEGIN    
    INSERT INTO invoice(sonvinid, tid, date, brandname, zone, location, area, venuename, venue, instructore, amount)  
        SELECT
            instructoreexpense.sonvinid,  
            sonvininsert.trainer,               
            CONVERT(VARCHAR, sonvininsert.date, 105) AS date,
            sonvininsert.brandname,                
            SUBSTRING(sonvininsert.zone, 1, 1) AS zone,                
            sonvininsert.location,                
            sonvininsert.area,                
            companysonvinunitvenue.venuename,              
            sonvininsert.venue,                
            sonvininsert.instructore,                            
            instructoreexpense.amount  
        FROM
            instructoreexpense                 
        LEFT OUTER JOIN
            sonvininsert ON sonvininsert.sonvinid = instructoreexpense.sonvinid 
                         AND sonvininsert.status = '0'                  
        LEFT OUTER JOIN 
            finalinstructoreexpense ON finalinstructoreexpense.sonvinid = instructoreexpense.sonvinid                  
        LEFT OUTER JOIN
            companysonvinunitvenue ON companysonvinunitvenue.id =  sonvininsert.comsonvinid                           
        WHERE
            sonvininsert.date BETWEEN CONVERT(DATETIME, @from, 105)
                                  AND CONVERT(DATETIME, @to, 105) 
            AND sonvininsert.trainer = (SELECT empname 
                                        FROM trainerdetails 
                                        WHERE trid = @trainer)  
            AND instructoreexpense.sonvinid NOT IN (SELECT CAST(Item AS INTEGER)  
                                                    FROM SplitString(@sonvinid, ','))
        ORDER BY 
            instructoreexpense.sonvinid  
END   

и когда я выполняю хранимую процедуру, как

exec profinalinstexpensesonid '01-01-2013','01-01-2017','andrews'

Я получаю следующую ошибку

Сообщение 8152, уровень 16, состояние 13, процедура Profinalinstexpensesonid, строка 10
Строка или двоичные данные будут проигнорированы.

В моей строке 10 у меня есть следующий код

insert into invoice(sonvinid, tid, date, brandname, zone, location, area, venuename, venue, instructore, amount)

Я не знаю, что здесь не так?

2 ответа

Решение

В сообщении об ошибке указывается размер столбца в invoice таблица меньше по сравнению с размером вставляемых в нее данных.

Например, если столбец brandname имеет тип данных varchar(50) и вы пытаетесь вставить больше, чем 50 символов, то это вызовет ошибку.

Чтобы решить эту проблему, сравните размер столбцов в invoice с размером вставляемых столбцов.

Вам необходимо проверить размер столбца таблицы счетов-фактур, а также столбцы в списке выбора, из которого вы заполняете данные.

Допустим, вы вставляете столбец "B" с типом данных как varchar(70) из таблицы 2 в столбце "А" с типом данных varchar(50) в таблице 1; это не сработает, так как вы пытаетесь вставить 70 символов в 50 varchar размер столбца.

Проверьте тип данных столбца источника и назначения и его длину; и измените его и попробуйте снова.

Другие вопросы по тегам