vb.net – 使用SQL参数处理IN子句中的数据?
发布时间:2020-12-17 00:27:33 所属栏目:大数据 来源:网络整理
导读:我们都知道,准备好的语句是SQL注入攻击的最佳方式之一.使用“IN”子句创建准备好的语句的最佳方法是什么?有没有一个简单的方法来做到这一点与未指定数量的价值观?以下列查询为例. SELECT ID,Column1,Column2 FROM MyTable WHERE ID IN (1,2,3) 目前,我正在
我们都知道,准备好的语句是SQL注入攻击的最佳方式之一.使用“IN”子句创建准备好的语句的最佳方法是什么?有没有一个简单的方法来做到这一点与未指定数量的价值观?以下列查询为例.
SELECT ID,Column1,Column2 FROM MyTable WHERE ID IN (1,2,3) 目前,我正在使用一个循环覆盖我可能的值来构建一个字符串,如. SELECT ID,Column2 FROM MyTable WHERE ID IN (@IDVAL_1,@IDVAL_2,@IDVAL_3) 是否可以使用传递数组作为查询参数的值,并使用查询如下? SELECT ID,Column2 FROM MyTable WHERE ID IN (@IDArray) 如果重要的是我正在使用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 然后使用以下… Declare @CommaSeparated varchar(50) Set @CommaSeparated = '112,112,122' SELECT ID,Column2 FROM MyTable WHERE ID IN (select col FROM [SeparateValues](@CommaSeparated,',')) 我认为sql server 2008将允许表函数. UPDATE 您将使用以下语法来挤压一些额外的性能… SELECT ID,Column2 FROM MyTable Cross Apply [SeparateValues](@CommaSeparated,') s Where MyTable.id = s.col 因为以前的语法导致SQL Server使用“IN”子句运行额外的“Sort”命令.加上 – 在我看来,它看起来更好:D! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |