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
размер столбца.
Проверьте тип данных столбца источника и назначения и его длину; и измените его и попробуйте снова.