我有以下问题......
我有三个变量,v1,v2,v2(所有类型都是java.util.ArrayList)。我想编写一个存储过程,将该变量作为输入并更新一个表。
如何在sql中循环抛出变量的数组列表并更新表? 例如,v1(10,11,12),v2(21,22,23),v3(31,32,33)的值。表的sql更新应如下所示 表格1: 第1行:10,21,31 第2行:11,22,32 第3行:12,23,33
如果有人可以回复我,请告诉我如何为此编写商店程序,我将感激不尽。
答案 0 :(得分:0)
我使用过这种方法,对我来说非常合适。
让您的存储过程接收三个变量,每个变量为varchar(max)
- 如果您知道大小,则可以写入数字而不是max
。例如:
create procedure usp_testSP
@v1 varchar(max),
@v2 varchar(max),
@v3 varchar(max)
as
begin
declare @v1Values table (number int);
insert into @v1values
select * from dbo.fnSplit(@v1,','); -- the fnSplit function is given below
-- this way you can retrieve all values for other two variables
-- then you can use the corresponding tables, i.e.: @v1Values to complete the steps you need to.
end
以下是dbo.fnSplit(@inputList, @delimiter)
的代码:
CREATE FUNCTION [dbo].[fnSplit](@sInputList VARCHAR(max), @sDelimiter VARCHAR(10) = ',')
RETURNS @List TABLE (item varchar(100))
BEGIN
DECLARE @sItem varchar(100)
WHILE CHARINDEX(@sDelimiter, @sInputList, 0) <> 0
BEGIN
SELECT @sItem = RTRIM(LTRIM(SUBSTRING(@sInputList, 1, CHARINDEX(@sDelimiter, @sInputList,0) - 1))),
@sInputList = RTRIM(LTRIM(SUBSTRING(@sInputList, CHARINDEX(@sDelimiter, @sInputList, 0) + LEN(@sDelimiter),LEN(@sInputList))))
IF LEN(@sItem) > 0
INSERT INTO @List SELECT @sItem
END
IF LEN(@sInputList) > 0
BEGIN
INSERT INTO @List SELECT @sInputList
END
RETURN
END
最后,在您的java代码中,您可以将列表转换为字符串并将其传递给存储过程调用。
List<Integer> v1; //suppose this is the list that contains the values.
String s = String.join("," /*this is the delimiter. It should be the same as the one you use when you call the dbo.fnSplit() function.*/, v1);