在项目中多用存储过程可减少传输流量,也可防止库里的表结构遭到泄露等(好处多多),平时很少写存储过程,今天改个东西发现生疏多了,暂且记成笔记吧!
参数@ids="1,2,3,4,"@gid="1"执行后表里结果
ALTER PROCEDURE 存储过程NAME
@gid smallint,
@ids varchar(500)
AS
BEGINSET NOCOUNT ON;declare @id smallintBegin TransAction B2delete from GA(表) where GroupsID=@gidWHILE CHARINDEX(',',@ids)>0BEGINset @id=CAST(LEFT(@ids,CHARINDEX(',',@ids)-1) as smallint)insert into GA(ID,AID) values(@gid,@id)IF @@ROWCOUNT=0BEGINRollBack TransAction B2return 2ENDset @ids=STUFF(@ids,1,CHARINDEX(',',@ids),'')ENDCommit TransAction B2return 1
END
- 当SET NOCOUNT为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。当 SET NOCOUNT 为 OFF 时,返回计数。
-
CHARINDEX CHARINDEX ( expression1 , expression2 [ , start_location ] )
Expression1是要到expression2中寻找的字符中,start_location是CHARINDEX函数开始在expression2中找expression1的位置。
SQL CHARINDEX函数返回一个整数,返回的整数是要找的字符串在被找的字符串中的位置。假如SQL CHARINDEX函数没有找到要找的字符串,那么函数整数“0”。让我们看看下面的函数命令执行的结果:
CHARINDEX('SQL', 'Microsoft SQL Server')
这个函数命令将返回在“Microsoft SQL Server”中“SQL”的起始位置,在这个例子中,CHARINDEX函数将返回“S”在“Microsoft SQL Server”中的位置11。
接下来,我们看这个CHARINDEX命令:
CHARINDEX('7.0', 'Microsoft SQL Server 2000')
在这个例子中,CHARINDEX返回零,因为字符串“7.0” 不能在“Microsoft SQL Server”中被找到。 - cast
将某种数据类型的表达式显式转换为另一种数据类型。语法:CAST ( expression AS data_type )CAST(ytd_sales AS char(20))
把字符串 '20091014191338' 转换成时间的时候:
select cast(stuff(stuff(stuff('20091014191338',9,0,' ' ),12,0,':'),15,0,':') as datetime)
- LEFT
取一个字符串的前若干位 select left('abcdefg', 3) 输出: abc
- STUFF (有填充物的意思)看参数就知道它的作用了stuff(A,B,C,D)A:原字符串:其中的某一部分将被替换。B:开始替换的位置:指定从原字符串的第几个字符开始替换。C:被替换的字符数:指定从开始处连续有几个字符要被替换掉(如果此数为0,那么“用于替换的字符串”将插入到开始处)。D:用于替换的字符串:该字符串将代替被替换掉的字符串放到原字符串当中。(如果此为空字符串,被替换的字符将被删除。)