Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为MSSQL中的字符串数组创建存储过程_Java_Arrays_Sql Server 2008 - Fatal编程技术网

Java 为MSSQL中的字符串数组创建存储过程

Java 为MSSQL中的字符串数组创建存储过程,java,arrays,sql-server-2008,Java,Arrays,Sql Server 2008,我有三个字符串的数组。我需要将其包含到存储过程中 我的脊梁骨 private String [] model_NU= {"'N'", "'U'", "'D'"}; 我的存储进程。在爪哇 String stm = "{call myDB.dbo.StoredPorcQuery (?,?,?,?,?,?,?,?,?,?,?,?)}"; try { ps = con.prepareStatement(stm); ps.setArray(1, fb.getMode

我有三个字符串的数组。我需要将其包含到存储过程中

我的脊梁骨

private String [] model_NU= {"'N'", "'U'", "'D'"};
我的存储进程。在爪哇

String stm = "{call myDB.dbo.StoredPorcQuery (?,?,?,?,?,?,?,?,?,?,?,?)}";
try {   
        ps = con.prepareStatement(stm);
        ps.setArray(1, fb.getModel_nu());
        --------
        rs = ps.executeQuery();
我正在使用MS SQL Server Management Studio,下面是存储过程中的变量

-----
ALTER PROCEDURE  [dbo].[StoredPorcQuery] 
@model_nu varchar (6)='%', ->Not sure here I need to use varchar to represent array
----
WHERE----
table1.model_nu IN (@model_nu)  ->Not sure this part.

我不擅长存储过程,也不知道如何在存储过程中声明此数组并在函数中使用以查询数组值。

我通过在存储过程中创建表函数解决了上述问题。并在查询之前将数组值发送给函数

SQL函数dbo.fnSplitString创建表并用“,”分隔字符串

USE [MYTable]
GO
/****** Object:  UserDefinedFunction [dbo].[fnSplitString]    Script Date: 05/08/2015 16:06:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[fnSplitString] 
( 
    @string NVARCHAR(MAX), 
    @delimiter CHAR(1) 
) 
RETURNS @output TABLE(splitdata NVARCHAR(MAX) 
) 
BEGIN 
    DECLARE @start INT, @end INT 
    SELECT @start = 1, @end = CHARINDEX(@delimiter, @string) 
    WHILE @start < LEN(@string) + 1 BEGIN 
        IF @end = 0  
            SET @end = LEN(@string) + 1

        INSERT INTO @output (splitdata)  
        VALUES(SUBSTRING(@string, @start, @end - @start)) 
        SET @start = @end + 1 
        SET @end = CHARINDEX(@delimiter, @string, @start)

    END 
    RETURN 
END
在爪哇

String stm = "{call myDB.dbo.StoredPorcQuery (?,?,?,?,?,?,?,?,?,?,?,?)}";
try {   
        ps = con.prepareStatement(stm);
        ps.setString(1, fb.getModel_nu());
        --------
        rs = ps.executeQuery(); 
并在backbean中声明数组

private String [] model_NU= {"N","U","D"};

该函数将数组和存储拆分为一个表,最后您可以使用存储过程将该表发送到查询。

SQL Server中没有数组之类的东西。查找TVP,不知道Java是否支持它们,如果不支持,则在T-SQL中使用字符串拆分函数。首先,请参阅和。是否有任何方法可以将其作为ps.setString传递给IN参数进行查询?您必须使用动态SQL。为什么您认为这比拆分字符串要好?我不是拆分字符串,我有选择下拉菜单中的值需要发送到存储过程。要执行queryRight,我建议在存储过程中使用字符串拆分函数。你看过我贴的链接了吗?
private String [] model_NU= {"N","U","D"};