2017-10-24 11 views
1

ここでは、私はC#から配列を受け取りました。それを@idUser int@idRegion intという2つの列のみで次の表に挿入したいとします。なぜこの単純なストアドプロシージャが機能しないのですか

ストアドプロシージャは配列を受け取ってテーブルに挿入する必要がありますが、何らかの理由で動作していないと、@idRegionをintに変換できないことがわかります。私はCASTCONVERTを使ってintに変換しようとしましたが、動作しません。

Select Fromは正常ですが、挿入はできません。ここ

は、ストアドプロシージャ(@idUserニーズが全て挿入された行のために同じである)である。

@idUser int, 
    @idRegion nvarchar(MAX) 
AS 
BEGIN 
    INSERT INTO [UsersRegion] (idUser,IdRegion) 
    VALUES (@idUser, @idRegion) 
    SELECT @idUser,cast(value as int) FROM STRING_SPLIT(@idRegion,',') 
END 

それを実行しているとき、私はこのエラーを取得する:nvarchar型の値を変換する際

変換が失敗しました'1,2,3,4'をデータ型intに変換します。

答えて

0

INSERTステートメントはIdRegionで動作しているようですが、他のすべては小文字のidです。

しかし、

...これは実際のテーブル列がどのように命名されるかで、タイプミスではないと仮定するとあなたの問題が最も可能性が高いという行です:@idRegion変数を宣言している
@idRegion nvarchar(MAX)
文字列として、それはintであることを意味しているという質問に書いている間に。 これはキャストエラーを説明します。

C#コードからプロシージャにintとして渡すことができない場合。あなたの唯一の他の選択肢は、あなたが言ったようにそれをintに解析しようとすることでしょう。

+0

キャストの詳細や変換はああ、それはそれは数字の配列ですか?私はちょうど私が怖いあなたを助けていないのだろうか?と言った すべての単一番号ではありません – Dog

+0

:(動作していないよう... –

2

@ idRegionで複数の値を送信する場合、それらを分割すると、挿入する必要があるものが2つ以上ある場合があります。したがって、このようにそれを行う:ターゲット表のIdRegion列がタイプintである場合

INSERT INTO [UsersRegion] (idUser,IdRegion) 
SELECT @idUser, value FROM STRING_SPLIT(@idRegion, ',') 

、あなたはこのようにキャストする必要があります。コードの上

SELECT @idUser, cast(value as int) FROM STRING_SPLIT(@idRegion, ',') 

すべてのレコードに対して同じ@idUserを挿入しますが、分割された項目によって異なるIdRegionの値。 Insert into select from

+0

sp32を実行するときに文字列を手動で入力しようとすると、同じエラーが表示される nvarchar値 '1,2,3,4を変換するときに変換に失敗しました'をデータ型intに変換します。 – Dog

+0

@Dogあなたが挿入しているテーブルがintカラムを持っている場合、あなたはキャストする必要があります: '@@ IDUser、cast(value as int)FROM STRING_SPLIT(@idRegion、 '、')' – CodingYoshi

+0

次のようにしようとしていますが、 'value'にエラーがあります。無効な列名 'value'があります。 '@DUUser、cast(value as int)FROM Viridis.dbo.Split(@idRegion、 '、')' – Dog

関連する問題