簡體   English   中英

System.Data.SqlClient.SqlException:字符串或二進制數據將被截斷

[英]System.Data.SqlClient.SqlException: String or binary data would be truncated

我正在創建一個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,第16級,狀態13,第10行,程序profinalinstexpensesonid
字符串或二進制數據將被截斷。

在我的第10行中,我有以下代碼

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

我不知道這是怎么回事?

該錯誤消息指出, invoice表中的列的大小小於要插入其中的數據的大小。

例如,如果列brandname數據類型為varchar(50)而您嘗試插入的字符超過50 ,則將導致錯誤。

要解決此問題,請將invoice中的列大小與要插入的列大小進行比較。

您需要檢查發票表的列大小以及要從中填充數據的選擇列表中的列。

假設您要從表2中將數據類型為varchar(70)列“ B”插入表1中的數據類型為varchar(50)列“ A”中; 當您嘗試在50個varchar大小的列中插入70個字符時,此操作將無效。

檢查源列和目標列的數據類型及其長度; 並更改它,然后重試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM