这是交易,我从C#收到一个数组,我想将它插入下表,只有2列@idUser int
和@idRegion int
。
存储过程需要接收数组并将其插入到表中但不知何故它不起作用,它告诉我它无法将@idRegion
转换为int。我尝试使用CAST
和CONVERT
将其转换为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 :(得分:2)
如果要在@idRegion中发送多个值,那么在拆分它们时,可能需要插入多个项目。因此,这样做:
INSERT INTO [UsersRegion] (idUser,IdRegion)
SELECT @idUser, value FROM STRING_SPLIT(@idRegion, ',')
如果目标表的IdRegion
列的类型为int
,则需要像这样投射:
SELECT @idUser, cast(value as int) FROM STRING_SPLIT(@idRegion, ',')
以上代码将为每条记录插入相同的@idUser
,但根据拆分的项目为IdRegion
插入不同的值。更多关于Insert into select from
答案 1 :(得分:0)
您的INSERT语句似乎与IdRegion
一起使用,而其他所有内容都是小写的id
。
但是,假设这是实际表列的命名方式,而不是拼写错误...
您的问题很可能是以下行:
@idRegion nvarchar(MAX)
这是将@idRegion变量声明为字符串,而你在问题中声明它意味着是一个int。
这可以解释投射错误。
如果你不能将它作为C#代码中的int传递给过程。你唯一的另一个选择就是尝试将它解析成一个int,就像你说的那样。