vb.net – 使用SQL参数处理IN子句中的数据?

前端之家收集整理的这篇文章主要介绍了vb.net – 使用SQL参数处理IN子句中的数据?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们都知道,准备好的语句是sql注入攻击的最佳方式之一.使用“IN”子句创建准备好的语句的最佳方法是什么?有没有一个简单的方法来做到这一点与未指定数量的价值观?以下列查询为例.
SELECT ID,Column1,Column2 FROM MyTable WHERE ID IN (1,2,3)@H_403_2@ 
 

目前,我正在使用一个循环覆盖我可能的值来构建一个字符串,如.

SELECT ID,Column2 FROM MyTable WHERE ID IN (@IDVAL_1,@IDVAL_2,@IDVAL_3)@H_403_2@ 
 

是否可以使用传递数组作为查询参数的值,并使用查询如下?

SELECT ID,Column2 FROM MyTable WHERE ID IN (@IDArray)@H_403_2@ 
 

如果重要的是我正在使用sql Server 2000,在VB.Net

在这里你先去创建以​​下功能
Create Function [dbo].[SeparateValues]
(
    @data VARCHAR(MAX),@delimiter VARCHAR(10) 
) 
    RETURNS @tbldata TABLE(col VARCHAR(10))
As
Begin
    DECLARE @pos INT
    DECLARE @prevpos INT

    SET @pos = 1 
    SET @prevpos = 0

    WHILE @pos > 0 
        BEGIN

        SET @pos = CHARINDEX(@delimiter,@data,@prevpos+1)

        if @pos > 0 
        INSERT INTO @tbldata(col) VALUES(LTRIM(RTRIM(SUBSTRING(@data,@prevpos+1,@pos-@prevpos-1))))

        else

        INSERT INTO @tbldata(col) VALUES(LTRIM(RTRIM(SUBSTRING(@data,len(@data)-@prevpos))))

        SET @prevpos = @pos 
    End

    RETURN

END@H_403_2@ 
 

然后使用以下…

Declare @CommaSeparated varchar(50)
Set @CommaSeparated = '112,112,122'
SELECT ID,Column2 FROM MyTable WHERE ID IN (select col FROM [SeparateValues](@CommaSeparated,','))@H_403_2@ 
 

我认为sql server 2008将允许表函数.

UPDATE

您将使用以下语法来挤压一些额外的性能

SELECT ID,Column2 FROM MyTable
Cross Apply [SeparateValues](@CommaSeparated,') s
Where MyTable.id = s.col@H_403_2@ 
 

因为以前的语法导致sql Server使用“IN”子句运行额外的“Sort”命令.加上 – 在我看来,它看起来更好:D!

猜你在找的VB相关文章