sql储存过程in(多个参数)

首先要创建一个截取字符串的函数

函数SqlitIn的第一个参数是储存过程要in的字符串,第二个参数是分隔符

 1 CREATE  function  [dbo].[SplitIn](@c varchar(100),@split varchar(2))
 2 returns @t  table(col varchar(20))
 3 as
 4 begin
 5   while(charindex(@split,@c)<>0)
 6     begin
 7       insert  @t(col)values (substring(@c,1,charindex(@split,@c)-1))
 8       set @c=stuff(@c,1,charindex(@split,@c),‘‘)
 9     end
10   insert @t(col)values(@c)
11   return
12 end 

这个函数的作用比喻:

select col from SplitIn(‘00001,00002,00003‘,‘,‘)   得到的结果是

即把传入的字符串‘00001,00002,00003‘ 根据逗号分割,变成一个只有一列的表

最后储存过程调用这个函数

@id=‘00001,00002,00003‘

select * from A where id in(select col from SplitIn(@id,‘,‘)) 就ok 了

上面这句相当于select * from A where id in(‘00001‘,‘00002‘,‘00003‘)

时间: 2024-07-30 19:15:56

sql储存过程in(多个参数)的相关文章

sql 储存过程的使用

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 -<span style="background-color: rgb(255, 255, 0);">-获取所有数据 根据自定义函数传人类型id返回类型名称</span> USE [Cloths] GO /****** Object:  StoredProcedure [dbo].[Proc_all]    Script Date: 05/23/2014 12:10:37 ******/ SE

SQL储存过程

基本语法 创建存储过程 create procedure sp_name @[参数名] [类型],@[参数名] [类型] as begin ......... end 以上格式还可以简写成: create proc sp_name @[参数名] [类型],@[参数名] [类型] as begin ......... end 注:"sp_name"为需要创建的存储过程的名字,该名字不可以以阿拉伯数字开头 调用存储:exec sp_name [参数名] 删除存储:drop procedur

关于SQL储存过程中输出多行数据

declare @num1 int           --为符合条件的总行数 select @num1=COUNT(1) from cardInfo where openDate between @date1 and @date2 [email protected] 和 @date2 为开始时间到结束时间,可以理解一个条件 while(@num1<>0) --和下面的[email protected]=1形成循环的次数begin print @num1                    

【转】xp_dirtree储存过程漏洞

sql server 2000漏洞一直很多前段时间我自己的服务器就出现了一个sql的临时储存过程漏洞漏洞扩展:xp_dirtree储存过程 事前:最近发现一个漏洞是sql服务器造成的前几天正好没有什么事情,就用阿d的sql注入工具对自己服务器的网站进行注入,偶然发现了使用mssql的网站浸染可以利用sql注入的形式得到整个服务器上所有目录(我的服务器作了安全设置的)依然可以看见,然后在服务器上安装了一个抓包工具对sql server进行抓包发现,使用工具连接sql漏洞xp_dirtree读取目录

SQL获取所有数据库名、表名、储存过程以及参数列表

SQL获取所有数据库名.表名.储存过程以及参数列表 1.获取所有用户名:SELECT name FROM Sysusers where status='2' and islogin='1'islogin='1'表示帐户islogin='0'表示角色status='2'表示用户帐户status='0'表示糸统帐户2.获取所有数据库名:SELECT Name FROM Master..SysDatabases ORDER BY Name3.获取所有表名SELECT Name FROM Databas

SQL Server 储存过程的output 参数

要做的参数的回传一方面要做到有储存过程的配合,再一方面也要有调用方法的配合,也就是说错误的调用方法是没有办法把值回传的. 下面是例子 --1.储存过程方面的配合 create procedure dbo.usp_C @i as int output    ---**注意这里要用output 关键字**--- as begine set @i =100; end; -- 2.调用方面的配合 declare @j as int =1; exec dbo.usp_C @j output ;--**注意

sql之储存过程与函数的区别

1.创建函数.查找函数 /*创建带参数的函数,返回单个*/ CREATE FUNCTION [dbo].[GETGrade](@userName nvarchar(10),@subject nvarchar(10)) returns nvarchar(10) as begin declare @grade nvarchar(10) if @userName='张三' set @grade=(select [source] from TestRows2Columns where [email pr

SQL SERVER 判断是否存在并删除某个数据库、表、视图、触发器、储存过程、函数

-- SQL SERVER 判断是否存在某个触发器.储存过程 -- 判断储存过程,如果存在则删除IF (EXISTS(SELECT * FROM sysobjects WHERE name='procedurename' AND type='P')) DROP PROCEDURE procedurename -- 判断触发器,如果存在则删除IF (EXISTS(SELECT * FROM sysobjects WHERE id=object_id(N'[dbo].[triggername]')

[SQL Server]储存过程中使用临时表循环操作数据

本文为原创文章,转载请注明出处!我的博客地址:http://www.cnblogs.com/txwd 由于工作原因,到目前为此已有一年多没有写SQL Server的储存过程了,已有些生疏.日前工作中有个表的数据需要定时更新,翻了一下以前写的储存过程,在此记录一下. 需求是这样的: 有两张表     1.博主表: Blogger ,2.博主对应的文章表: BlogForBlogger 文章表的数据由服务端定时获取,博主表有个字段保存博主文章的总数量,所以这个字段要定时去更新. 实现:创建一个储存过