SQL2008R2 查询语句

弄雨 2015-09-01 10:53:07
需求: 根据adress的值一个查询一条数据出来 ,如果我有1000或者更多 传来的来参数用“,”逗号隔开 那如何高效的查询出1000或更多的数据呢
...全文
202 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Pact_Alice 2015-09-01
  • 打赏
  • 举报
回复
SELECT * FROM TestInfo WHERE ADDRESS in(SELECT nvalue FROM dbo.fn_Information('2115,2116,2117'))
弄雨 2015-09-01
  • 打赏
  • 举报
回复
引用 3 楼 xxfvba 的回复:
declare @s varchar(4000)
set @s='2115,2116,2117'
select * from TestInfo where charindex(','+adress+',',','+@s+',')>0


经过测试 110W条数据找的话需要3秒时间 可我的数据是可能有千万级别的会不会有影响 性能方面问题等..
xxfvba 2015-09-01
  • 打赏
  • 举报
回复
declare @s varchar(4000) set @s='2115,2116,2117' select * from TestInfo where charindex(','+adress+',',','+@s+',')>0
弄雨 2015-09-01
  • 打赏
  • 举报
回复
引用 1 楼 Landa_Alice 的回复:
create FUNCTION fn_Information(
--==========================================================
--Author: alice
--Create Time: 2015/03/04
--Description: 创建函数,用于传入字符串,将字符串以逗号分开,放入返回表中
--Version : 1.0
--==========================================================
@arr AS VARCHAR(max) --传入参数
)
RETURNS @t TABLE( --返回表
pos INT NOT NULL, --单号
nvalue VARCHAR(5000) NOT NULL --拆分结果
)
AS
BEGIN
DECLARE
@end AS INT, --开始
@start AS INT, --结束
@pos AS INT --排号
SELECT
@arr = @arr + ',', --逗号赋值
@pos = 1,
@start = 1,
@end = CHARINDEX(',', @arr, @start)
WHILE @end > 1
BEGIN
INSERT INTO @t VALUES(@pos, SUBSTRING(@arr, @start, @end-@start))
SELECT @pos = @pos + 1,
@start = @end + 1, @end = CHARINDEX(',', @arr,@start)
END
RETURN
END

SELECT * FROM tableName WHERE ADDRESS in(SELECT * FROM dbo.fn_Information('2115,2116,2117'))



函数创建了 查询确报错 。。
Pact_Alice 2015-09-01
  • 打赏
  • 举报
回复
create FUNCTION fn_Information( --========================================================== --Author: alice --Create Time: 2015/03/04 --Description: 创建函数,用于传入字符串,将字符串以逗号分开,放入返回表中 --Version : 1.0 --========================================================== @arr AS VARCHAR(max) --传入参数 ) RETURNS @t TABLE( --返回表 pos INT NOT NULL, --单号 nvalue VARCHAR(5000) NOT NULL --拆分结果 ) AS BEGIN DECLARE @end AS INT, --开始 @start AS INT, --结束 @pos AS INT --排号 SELECT @arr = @arr + ',', --逗号赋值 @pos = 1, @start = 1, @end = CHARINDEX(',', @arr, @start) WHILE @end > 1 BEGIN INSERT INTO @t VALUES(@pos, SUBSTRING(@arr, @start, @end-@start)) SELECT @pos = @pos + 1, @start = @end + 1, @end = CHARINDEX(',', @arr,@start) END RETURN END SELECT * FROM tableName WHERE ADDRESS in(SELECT * FROM dbo.fn_Information('2115,2116,2117'))
弄雨 2015-09-01
  • 打赏
  • 举报
回复
嗯 就是这样 之前楼上的那个 数据量大 很慢 这个快

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧