sql server 中将由逗号“,”分割的一个字符串,转换为一个表,并应用与 in 条件...

news/2024/7/7 21:35:43
复制代码
select * from tablenmae where id in(1,2,3)
复制代码

这样的语句和常用,但是如果in 后面的 1,2,3是变量怎么办呢,一般会用字符串连接的方式构造sql语句

复制代码
string aa="1,2,3";

string sqltxt="select * from tablename where id in ("+aa+")";
复制代码

然后执行 sqltxt

这样的风险是存在sql注入漏洞。那么如何在 in 的条件中使用变量呢?可以把形如“1,2,3”这样的字符串转换为一个临时表,这个表有一列,3行,每一行存一个项目(用逗号分隔开的一部分)

该函数可以这样写:

复制代码
create Function StrToTable(@str varchar(1000))
Returns @tableName Table
(
str2table varchar(50)
)
As
--该函数用于把一个用逗号分隔的多个数据字符串变成一个表的一列,例如字符串'1,2,3,4,5' 将编程一个表,这个表
Begin
set @str = @str+','
Declare @insertStr varchar(50) --截取后的第一个字符串
Declare @newstr varchar(1000) --截取第一个字符串后剩余的字符串
set @insertStr = left(@str,charindex(',',@str)-1)
set @newstr = stuff(@str,1,charindex(',',@str),'')
Insert @tableName Values(@insertStr)
while(len(@newstr)>0)
begin
set @insertStr = left(@newstr,charindex(',',@newstr)-1)
Insert @tableName Values(@insertStr)
set @newstr = stuff(@newstr,1,charindex(',',@newstr),'')
end
Return
End
复制代码

然后sql语句就可以这样了

复制代码
declare str vchar(100)

set str='1,2,3'

select * from tablename where id in (select str2table from StrToTable(@str) )
复制代码

 

转载于:https://www.cnblogs.com/amylis_chen/p/3272808.html


http://lihuaxi.xjx100.cn/news/276785.html

相关文章

解析激光雷达中时序融合的研究现状和发展方向

本文转自:计算机视觉联盟在自动驾驶领域,基于激光雷达 (LiDAR) 的3D物体检测和运动行为预测是一种普遍的方案。目前绝大部分关于激光雷达的物体检测算法都是基于单帧的。激光雷达的多帧时序数据,提供了对于检测物体的多视角观测 (multiple vi…

女帝

日本的夜生活很感兴趣,因为日本居然有堂堂正正的牛郎店。在里面长得超帅的牛郎陪客人喝酒、聊天,让客人忘记白天工作的辛苦。所以千万不要认为牛郎是从事色情服务的,虽然也有败类,但那是违反行业准则的……也就是,好的…

计算机转进制怎么看平方,计算机数制转换

一、数制的引入数制就是计数的方法,指用一组固定的符号和统一的规则来表示数值的方法。在日常生活中,人们主要使用十进制(0-9),但在某些时候也使用其它进制,如十二进制(如1年有12个月、1打物品有12件),六十进制(如1小时…

markdown 图片居中_Markdown更改字体、颜色、大小,插入表格等方法

Markdown 通过简单标记语法,使普通文本内容具有一定格式。但它本身不支持修改字体、字号与颜色等功能的。一、更改字体大小、颜色、更改字体Markdown语法效果如下:二、更改字体大小、颜色、更改字体由于 style 标签和标签的 style 属性不被支持&#xff…

今日头条李磊等最新论文:用于文本生成的核化贝叶斯Softmax

译者 | Raku 出品 | AI科技大本营(ID:rgznai100)摘要用于文本生成的神经模型需要在解码阶段具有适当词嵌入的softmax层,大多数现有方法采用每个单词单点嵌入的方式,但是一个单词可能具有多种意义,在不同的背景下&#…

牛逼哄哄的 Lambda 表达式,简洁优雅就是生产力!

点击上方“方志朋”,选择“设为星标”回复”666“获取新整理的面试资料作者:Sevenvidiahttps://www.zhihu.com/question/20125256/answer/3241213081什么是Lambda?我们知道,对于一个Java变量,我们可以赋给其一个“值”。如果你想…

HDU 1061 Rightmost Digit

解题报告&#xff1a;1097的翻版&#xff0c;求 N^N 次方的个位是多少&#xff1f; 详见我的另一篇HDU 1097 A hard puzzle稍加修改就行 1 #include<cstdio>2 int main( ) {3 int xh[20],n,a,N,T;4 scanf("%d",&T);5 while(T--) {6 sc…

开放平台架构_三步画出产品业务架构图

今天有位同学询问&#xff0c;如何才能画出“高大上”的业务架构图。他说&#xff1a;“最近公司要绘制XX行业的解决方案&#xff0c;需要产品经理画出整体架构图&#xff0c;但是自己没接触过&#xff0c;不知道如何下手。”曾经&#xff0c;这个问题也困扰我很久&#xff0c;…