gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 19:39:05 26 4
gpt4 key购买 nike

我们都知道准备好的语句是防御 SQL 注入(inject)攻击的最佳方法之一。创建带有“IN”子句的准备好的语句的最佳方法是什么?有没有一种简单的方法可以使用未指定数量的值来执行此操作?以下面的查询为例。

SELECT ID,Column1,Column2 FROM MyTable WHERE ID IN (1,2,3)

目前,我正在对可能的值使用循环来构建一个字符串,例如。

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

是否可以仅传递一个数组作为查询参数的值并按如下方式使用查询?

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

如果我在 VB.Net 中使用 SQL Server 2000 很重要

最佳答案

开始吧 - 首先创建以下函数...

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, @prevpos+1, len(@data)-@prevpos))))

SET @prevpos = @pos
End

RETURN

END

然后使用以下...

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

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

更新

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

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

因为前面的语法导致 SQL Server 使用“IN”子句运行额外的“Sort”命令。另外 - 在我看来它看起来更好:D!

关于vb.net - 使用 SQL 参数处理 IN 子句中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/93100/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com