2016-12-08 8 views
1

私は2つの主要な問題に直面しています!nvarchar値 'ABC113973'をデータ型intに変換するときに変換に失敗しました

問題1:

は、私は2つのテーブルを持っており、SQLでUNIONを使用して、特定のGridViewに必要なデータを表示したいです。表2には列{[Purchase_Date]列が含まれています。表2には列[{Date_Date] datetime、[Head] nvarchar(50)、[Details] nvarchar(360)、[ExpId] int、[Amount] decimal(18,2)}、 、 [VendorName] nvarchar(50)、[備考] nvarchar(50)、[Bill_No] nvarchar(50)、[AmountPaid]小数点(18,2)}

私のストアドプロシージャは次のとおりです。

DECLARE @Ledger TABLE 
    (  
    DATE DATETIME, 
    DESCRIPTION NVARCHAR(350), 
    REF_NO NVARCHAR (50), 
    AMOUNT INT  
    ) 

INSERT INTO @Ledger 
    SELECT 
     [Date], [Head] + ' - ' + [Details], [ExpId], [Amount] 
    FROM 
     [dbo].[Table1] 
    UNION 
    SELECT 
     [Purchase_Date], 'PURCHASE' + ' ' + [VendorName] + ' ' + [Remarks], [Bill_No], [AmountPaid] 
    FROM 
     [dbo].[Table2] 

SELECT * FROM @Ledger 

クエリを実行したとき、私はデータ型intにnvarchar型の値が「ABC113973」を変換するときにエラー

変換が失敗し得ます。

なぜ私はTable1なしで実行しようとすると、このエラーをスローするのはうまくいるのだろうか。データ型がintの列ExpIdが原因ですか?はいの場合はどうすれば対処できますか?

問題2:私はそれが数値

にvarchar型に変換するとき

の変換が失敗し、エラーをスロー進数字で結果を表示したいと私はdecimal(18,0)Amountデータ型を変更するには、上記の@Ledger表で

並べ替え:両方の実際の表の金額列のデータ型はdecimal(18,2)です。

誰も私にこの問題の解決策とその理由を教えてもらえますか?おかげ

+0

表1の列ExpIdのデータ型は –

+0

です。編集した質問を参照してください。データ型はExpIdのINTです。 – Omer

+0

これがエラーの原因です。共用体の列は同じデータ型でなければなりません.seebelow Answer –

答えて

1

はこれを試してみてください:

DECLARE @Ledger TABLE 
    (  
    DATE DATETIME, 
    DESCRIPTION NVARCHAR(350), 
    REF_NO NVARCHAR (50), 
    AMOUNT INT  
    ) 
INSERT INTO @Ledger 
    SELECT [Date], [Head] + ' - ' + [Details], CAST([ExpId] AS NVARCHAR(50)), [Amount] FROM [dbo].[Table1] 
    UNION 
    SELECT [Purchase_Date], 'PURCHASE' + ' ' + [VendorName] + ' ' + [Remarks], CAST([Bill_No] AS NVARCHAR(50)), [AmountPaid] FROM [dbo].[Table2] 
SELECT * FROM @Ledger 

あなたはvarchar列にbill_noexpidを挿入しようとしているので、あなたがエラーを取得しているが、両方のフィールドのデータ型がintです。したがって、castまたはconvertのいずれかの値をintに設定し、それをテーブルに挿入する必要があります。

編集:あなたは、小数点として元帳テーブルに量を格納する場合

その後、decimal(18,2)に金額列のデータ型を変更し、両方の実際のテーブルのカラムが同じデータでもあることを確認してくださいタイプ。

DECLARE @Ledger TABLE 
    (  
    DATE DATETIME, 
    DESCRIPTION NVARCHAR(350), 
    REF_NO NVARCHAR (50), 
    AMOUNT DECIMAL(18,2) 
    ) 
+0

大変です!それは問題の半分を解決しましたが、第二の問題はどうですか?それに対する解決策はありますか? – Omer

+0

@Omer私は自分の答えを更新しました。 –

+0

作品素晴らしいメイト!!感謝万円。さてさて、別の問題があります。テーブルの1つに[ReceiveAmount]小数点(18,2)が含まれているので、@ LedgerのReceivedAmount Decimal(18,2)に新しい列を追加しましたが、table1と2では、私は ''をselect文に追加しました。その "エラーがvarcharを数値に変換しています"というエラーが発生しました。 – Omer

関連する問題