sqlserver 常用存储过程集锦

=================分页==========================


复制代码 代码如下:

/*分页查找数据*/

create procedure [dbo].[getrecordset]

@strsql varchar(8000),–查询sql,如select * from [user]

@pageindex int,–查询当页号

@pagesize int–每页显示记录

as

set nocount on

declare @p1 int

declare @currentpage int

set @currentpage = 0

declare @rowcount int

set @rowcount = 0

declare @pagecount int

set @pagecount = 0

exec sp_cursoropen @p1 output,@strsql,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output –得到总记录数

select @pagecount=ceiling(1.0*@rowcount/@pagesize) –得到总页数

,@currentpage=(@pageindex-1)*@pagesize+1

select @rowcount,@pagecount

exec sp_cursorfetch @p1,16,@currentpage,@pagesize

exec sp_cursorclose @p1

set nocount off

go

=========================用户注册============================

/*

用户注册,也算是添加吧

*/

create proc [dbo].[useradd]

(

@loginid nvarchar(50),     –登录帐号

@password nvarchar(50), –密码

@email nvarchar(200) –电子信箱

)

as

declare @userid int –用户编号

–登录账号已经被注册

if exists(select loginid from tablename where loginid = @loginid)

begin

return -1;

end

–邮箱已经被注册

else if exists(select email from tablename where email = @email)

begin

return -2;

end

–注册成功

else

begin

select @userid = isnull(max(userid),100000)+1 from tablename

insert into tablename

(userid,loginid,[password],username,linknum,address,email,createtime,status)

values

(@userid,@loginid,@password,”,”,”,@email,getdate(),1)

return @userid

end

==========================sql server系统存储过程===================

–1.给表中字段添加描述信息

create table t2 (id int , name char (20))

go

exec sp_addextendedproperty ‘ms_description’, ’employee id’, ‘user’, dbo, ‘table’, t2, ‘column’, id

exec sp_updateextendedproperty ‘ms_description’, ‘this is a test’, ‘user’, dbo, ‘table’, t2, ‘column’, id

–2.修改数据库名称

exec sp_renamedb ‘old_db_name’, ‘new_db_name’

–3.修改数据表名称和字段名称

exec sp_rename ‘old_table_name’, ‘new_table_name’–修改数据表名称

exec sp_rename ‘table_name.[old_column_name]’, ‘new_column_name’, ‘column’–修改字段名称

–4.给定存储过程名,获取存储过程内容

exec sp_helptext sp_name

/*以下是有关安全控制的系统存储过程或 sql 语句,详细语法查阅《联机丛书》相关内容*/

–创建新的 sql server 登录,使用户得以连接使用 sql server 身份验证的 sql server。

exec sp_addlogin @loginame = ”, @passwd = ”, @defdb = ”, @deflanguage = null, @sid = null, @encryptopt = null

–使 windows nt 用户或组帐户得以使用 windows 身份验证连接到 sql server。

exec sp_grantlogin @loginame = ”

–删除 sql server 登录,以阻止使用该登录名访问 sql server。

exec sp_droplogin @loginame = ”

–阻止 windows nt 用户或组连接到 sql server。

exec sp_denylogin @loginame = ”

–从 sql server 中删除用 sp_grantlogin 或 sp_denylogin 创建的 windows nt 用户或组的登录项。

exec sp_revokelogin @loginame = ”

–更改登录的默认数据库。

exec sp_defaultdb @loginame = ”, @defdb = ”

–更改登录的默认语言。

exec sp_defaultlanguage @loginame = ”, @language = ”

–添加或更改 sql server 登录密码。

exec sp_password @old = ”, @new = ”, @loginame = ”

–添加服务器角色新成员。

exec sp_addsrvrolemember @loginame = ”, @rolename = ”

–添加服务器角色某成员。

exec sp_dropsrvrolemember @loginame = ” , @rolename = ”

–为 sql server 登录或 windows nt 用户或组在当前数据库中添加一个安全帐户,并使其能够被授予在数据库中执行活动的权限(授予默认的“public”数据库角色)。

exec sp_grantdbaccess @loginame = ”, @name_in_db = null

–或

exec sp_adduser @loginame = ”, @name_in_db = null, @grpname = ”

–从当前数据库中删除安全帐户。

exec sp_revokedbaccess @name_in_db = ”

–或

exec sp_dropuser @name_in_db = ”

–在当前数据库创建新数据库角色。

exec sp_addrole @rolename = ”, @ownername = ”

–在当前数据库删除某数据库角色。

exec sp_droprole @rolename = ”

–在当前数据库中添加数据库角色新成员。

exec sp_addrolemember @rolename = ”, @membername = ”

–在当前数据库中删除数据库角色某成员。

exec sp_droprolemember @rolename = ”, @membername = ”

–权限分配给数据库角色、表、存储过程等对象

–1、授权访问

grant

–2、拒绝访问

deny

–3、取消授权或拒绝

revoke

–4、sample(pubs):

grant select on authors to limperator

deny select on authors to limperator

revoke select on authors to limperator

====================数据库还原的存储过程============


复制代码 代码如下:

sql code

create proc killspid (@dbname varchar(20))

as

begin

declare @sql nvarchar(500)

declare @spid int

set @sql=’declare getspid cursor for

select spid

from sysprocesses

where dbid=db_id(”’+@dbname+”’)’

exec (@sql)

open getspid

fetch next from getspid

into @spid

while @@fetch_status <>-1

begin

exec(‘kill ‘+@spid)

fetch next from getspid

into @spid

end

close getspid

deallocate getspid

end

go

作用:杀掉传入数据库中的活动进程以进行备份还原等独占操作

===================阿拉伯数字转大写中文=============

例:输入12345,程序给出:壹万贰仟叁佰肆拾伍

例:输入10023040,程序给出:壹仟另贰万叁仟另肆拾

解决方案之一(在sqlserver2000中测试通过):


复制代码 代码如下:

sql code

create function fun_cgnum

(@num int)

returns varchar(100)

as

begin

declare @temp int,@res int,@i tinyint

declare @str varchar(100),@no varchar(20),@unit varchar(16)

select @str=”,@no=’另壹贰叁肆伍陆柒捌玖’,@unit=’拾佰仟万拾佰仟亿’

set @temp=@num

select @i=0,@res=@temp%10,@temp=@temp/10

while @temp>0

begin

if @i=0

set @str=substring(@no,@res+1,1)

else

set @str=substring(@no,@res+1,1)+substring(@unit,@i,1)+@str

select @res=@temp%10,@temp=@temp/10

set @i=@i+1

end

set @str=substring(@no,@res+1,1)+substring(@unit,@i,1)+@str

set @str=replace(@str,’另拾’,’另’)

set @str=replace(@str,’另佰’,’另’)

set @str=replace(@str,’另仟’,’另’)

set @str=replace(@str,’另拾’,’另’)

set @str=replace(@str,’另万’,’万’)

while @i>0

begin

set @str=replace(@str,’另另’,’另’)

set @i=charindex(‘另另’,@str)

end

set @str=replace(@str,’另万’,’万’)

set @str=replace(@str,’亿万’,’亿’)

if right(@str,1)=’另’

set @str=left(@str,len(@str)-1)

return @str

end

go

–测试:有0和没有0的情况

select dbo.fun_cgnum(900000000),dbo.fun_cgnum(903002051),dbo.fun_cgnum(903002050)

ps:有兴趣的朋友可以继续考虑有小数点以及添加单位(元/角/分)的情况

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐