我正在创建一个Web应用程序,我在其中对存储过程执行select命令,但我想将相同的已获取数据插入到另一个表中。
所以我尝试做了类似下面的事情
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,Level 16,State 13,Procedure profinalinstexpensesonid,第10行
字符串或二进制数据将被截断。
在我的第10行,我有以下代码
insert into invoice(sonvinid, tid, date, brandname, zone, location, area, venuename, venue, instructore, amount)
我不知道这里有什么问题?
答案 0 :(得分:1)
错误消息指出invoice
表中列的大小与插入其中的数据的大小相比较小。
例如,如果列brandname
的数据类型为varchar(50)
,并且您尝试插入超过50
个字符,则会导致错误。
要解决此问题,请将invoice
中的列大小与要插入的列的大小进行比较。
答案 1 :(得分:0)
您需要检查发票表的列大小以及从中填充数据的选择列表中的列。
我们假设您正在插入列" B"数据类型为varchar(70)
,来自table2 in the column" A"在table1中具有数据类型varchar(50)
;当您尝试在50 varchar
大小的列中插入70个字符时,这不会起作用。
检查来源&目标列数据类型&它的长度;并改变它并再试一次。