Voici l'affaire, je reçois un tableau de C # et je veux l'insert dans le tableau suivant avec seulement 2 colonnes qui sont @idUser int
et @idRegion int
.
La procédure stockée doit recevoir le tableau et l'insert dans la table mais de toute façon cela ne fonctionne pas, il me dit qu'il ne peut pas convertir @idRegion
à un int. J'ai essayé d'utiliser CAST
et CONVERT
pour le convertir en int mais cela ne fonctionne pas.
Le Select From
fonctionne bien, mais pas l'insert.
Voici la procédure stockée ( @idUser
doit être identique pour toutes les lignes insérées):
@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
J'ai cette erreur lors de l'exécution:
La conversion a échoué lors de la conversion de la valeur nvarchar '1,2,3,4' en type de données int.
Si vous envoyez plusieurs valeurs dans @idRegion, vous pouvez avoir plus d'une chose à insert lorsque vous les divisez. Par conséquent, faites comme ceci:
INSERT INTO [UsersRegion] (idUser,IdRegion) SELECT @idUser, value FROM STRING_SPLIT(@idRegion, ',')
Si la colonne IdRegion
la table cible est de type int
, vous devez IdRegion
comme IdRegion
:
SELECT @idUser, cast(value as int) FROM STRING_SPLIT(@idRegion, ',')
Le code ci-dessus insère le même @idUser
pour chaque logging, mais une valeur différente pour IdRegion
selon les éléments IdRegion
. Plus sur Insérer dans sélectionner parmi
Votre instruction INSERT semble fonctionner avec IdRegion
alors que tout le rest est en minuscule.
Cependant, en supposant que c'est ainsi que la colonne du tableau est nommée et n'est pas une faute de frappe …
Votre problème est probablement la ligne qui lit:
@idRegion nvarchar(MAX)
Qui déclare la variable @idRegion sous la forme d'une string, alors que vous avez indiqué dans la question qu'il s'agit d'un int. Cela expliquerait l'erreur de casting.
Si vous ne pouvez pas le passer dans la procédure comme un int à partir du code C #. Votre seule autre option serait d'essayer de l'parsingr dans un int comme vous l'avez dit.