如何创建动态SQL查询

时间:2014-11-30 11:47:39

标签: mysql sql

我有int [] id,我想创建一个sql语句,我必须获取user_id in(int [])的用户的所有详细信息。我正在使用预准备语句,所以请帮助我。< / p>

SELECT * FROM userrequest WHERE USER_ID IN ?

现在问题是在参数中设置了什么。没有什么是pstmt.setintarray。

1 个答案:

答案 0 :(得分:0)

一种解决方案(不使用动态sql,假设你正在使用MSSQL SERVER):

假设您发送了一个CSV字符串值:

'1,2,3,4'

你可以这样做:

SELECT * FROM userrequest WHERE USER_ID IN (SELECT Element  from dbo.FN_Split('1,2,3,4',','))

FN_Split在哪里:

CREATE FUNCTION [dbo].[FN_Split] 
(
    @InDelimitedString varchar(max),
    @InDelimiter       varchar(10) 
)
RETURNS 
    @tblArray TABLE 
    (
        ElementID  smallint IDENTITY(1,1), 
        Element    varchar(1000)
    )

AS
BEGIN

    DECLARE @StrPos smallint,
    @StrStart smallint,
    @DelimiterLength smallint

    SET @DelimiterLength = LEN(@InDelimiter)    

    --loop through source string and add elements to destination table array
    WHILE LEN(@InDelimitedString) > 0
        BEGIN
            SET @StrPos = CHARINDEX (@InDelimiter, @InDelimitedString)
            IF @StrPos = 0
                BEGIN
                    INSERT INTO @tblArray VALUES(@InDelimitedString)
                    BREAK
                END
            ELSE
                BEGIN
                    INSERT INTO @tblArray VALUES(SUBSTRING(@InDelimitedString, 1,@StrPos - 1))
                    SET @StrStart = @StrPos + @DelimiterLength
                    -- Shift source string left
                    SET @InDelimitedString = SUBSTRING(@InDelimitedString, @StrStart , LEN(@InDelimitedString) - @StrStart + 1)
                END
        END

    RETURN 
END