本文摘自博客园-曾祥展,原文地址:https://www.cnblogs.com/zengxiangzhan/archive/2010/01/03/1638152.html,侵删。
ALTER PROCEDURE [dbo].[example1]
(
@booker varchar(100)
)
AS
declare @str varchar(1000)
set @str='select * from tb_itregister where booker in(' + @booker + ')'
execute (@str)
调用:
string booker = "a,b";
booker = booker.Replace(",", "','");
booker = "'" + booker + "'";
/************************************************************
问题描述: id值可能有数千个之多,怎么提高效率?
例子:select * from table1 where id in (1,3,6,10,...,8000) and type = 1
************************************************************/
--例如:
SELECT *
FROM tb
WHERE id IN (1, 2, 3, 4, ........)
AND NAME = 'best'
--1.将括号的条件做成变量
DECLARE @str VARCHAR(4000)
SET @str = '1,2,3,4,5.......'
--2.然后将@s拆分后插入临时表
CREATE TABLE #t
(
id VARCHAR(10)
)
DECLARE @i INT
DECLARE @len INT
SET @i = 1
WHILE @i < LEN(@str + ',')
BEGIN
INSERT #t
SELECT SUBSTRING(@str + ',', @i, CHARINDEX(',', @str + ',', @i) -@i)
SET @i = CHARINDEX(',', @str + ',', @i) + 1
END
--3利用临时表和原表进行连接取值
SELECT k.*
FROM tb k
INNER JOIN #t p
ON p.id = k.id
WHERE NAME = 'best'
相关阅读 >>
更多相关阅读请进入《sql》频道 >>
数据库系统概念 第6版
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。