2017-01-19 51 views
0

ストアドプロシージャでselectコマンドを実行しているWebアプリケーションを作成していますが、同じフェッチされたデータを別のテーブルに挿入したいとします。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の列のサイズを挿入する列のサイズと比較します。

+0

ありがとうございます。重複した値を避けるために挿入句にwhere句を追加したい場合はどうすればいいですか? –

+0

@MumbaiWadala、where句に必要な条件を追加して重複を避けることができます。 – Mourya

+0

何か、私はあなたを得ない –

1

請求書テーブルの列サイズと、データを入力する選択リストの列を確認する必要があります。

table2のデータ型がvarchar(50)の列 "A"のtable2のデータ型がvarchar(70)の列 "B"を挿入しているとします。 50 varcharサイズの列に70文字を挿入しようとすると、これは機能しません。

ソースを確認&宛先列データ型&長さです。それを変更して再試行してください。

関連する問題