--1. 构造使用IN子句的动态Transact-SQL方法进行编号查询
--a. 要查询的字段类型是数字型
代码如下 | 复制代码 |
--查询的值列表 DECLARE @idlist varchar(100) SET @idlist='1,2,3' --拼接并执行动态Transact-SQL语句 --b. 要查询的字段类型是字符型 --拼接并执行动态Transact-SQL语句 --查询的值列表没有字符串边界符 --由于是字段类型是,所以在拼接时,必须为其加上字符串边界符(') --拼接并执行动态Transact-SQL语句 /*=====================================================*/ --2. 使用LIKE或者PATINDEX进行编号查询 --查询 /*=====================================================*/ --3. 编号查询中常见的错误 SET @s='1,2,3' --b. 生成动态Transact-SQL语句时忽略了数据类型。 --c. 忽略了比较的精确性问题。 --查询 |
在SQL Server Management Studio里执行这个(我使用的是SQL Server 2005如果是SQL 2000这个函数要改些内容如:VARCHAR(MAX)),会生成一个表值函数,然后使用时呢,比如你想实现:In(@ids)这时可以换成 In(select * from Split(@ids , ','))
这个函数的作用呢,就是把你输入的字符按一定的分隔符分开,并放在一个表里的一列里,然后返回。
例
代码如下 | 复制代码 |
--引用 Select * From Split('1,2,3' , ',') --引用 Select * From Split('我,是,www.111cn.net' , ',') CREATE FUNCTION [dbo].[Split] ( @c VARCHAR(MAX) , @split VARCHAR(50) ) RETURNS @t TABLE ( col VARCHAR(50) ) AS BEGIN WHILE ( CHARINDEX(@split, @c) <> 0 ) BEGIN INSERT @t( col ) VALUES ( SUBSTRING(@c, 1, CHARINDEX(@split, @c) - 1) ) SET @c = STUFF(@c, 1, CHARINDEX(@split, @c), '') END INSERT @t( col ) VALUES ( @c ) RETURN END |