2017-01-19 2 views
0

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

Так что я пытался сделать что-то вроде следующего

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' 

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

Msg 8152, Уровень 16, состояние 13, процедура profinalinstexpensesonid, строка 10
String или двоичные данные будут усечены.

На моей линии 10 У меня есть следующий код

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

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

ответ

2

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

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

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

+0

спасибо, сэр, и что, если я хочу добавить предложение where во вставке, чтобы избежать дублирования значений –

+0

@MumbaiWadala, вы можете добавить необходимые условия в предложение where, чтобы избежать дубликатов. – Mourya

+0

что, я не получу вас –

1

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

Предположим, вы вставляете столбец «B», имеющий тип данных varchar(70) из таблицы2 в столбце «A», имеющий тип данных varchar(50) в таблице1; это не сработает, поскольку вы пытаетесь вставить 70 символов в столбце размером 50 varchar.

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

Смежные вопросы