关于sql sever 的系统存储过程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于sql sever 的系统存储过程相关的知识,希望对你有一定的参考价值。

sql sever中提供有两类系统存储过程,一类是以sp_开头的,另一类是以xp_开头的,请高手说明,这两类系统存储过程都是干什么的,区别是什么,不用具体到某个存储过程,只需说明两个类别的区别即可。

存储过程分为三类:
系统存储过程:(System stored Procedure)sp_开头,为SQLSERVER内置存储过程。
扩展存储过程:(Extended stored Procedure),也就是外挂程序,用于扩展SQLSERVER的功能,以sp_或者xp_开头,以DLL的形式单独存在。

(系统存储过程和扩展存储过程都是在master数据库中。sp_开头的可是全局的,任何一个数据库都可以直接调用的。)
系统存储过程主要分为以下几类:

目录存储过程,例如:
sp_columns 返回当前环境中可查询的指定表或视图的列信息。
sp_tables 返回当前环境下可查询的对象的列表(任何可出现在 FROM 子句中的对象)。
sp_stored_procedures 返回当前环境中的存储过程列表。

复制类存储过程,例如:
sp_addarticle 创建项目并将其添加到发布中。此存储过程在发布服务器的发布数据库上执行。

安全管理类存储过程,例如:
sp_addrole 在当前数据库创建新的 Microsoft�0�3 SQL Server�6�4 角色。
sp_password 添加或更改 Microsoft�0�3 SQL Server�6�4 登录的密码。

分布式查询存储过程,例如:
sp_foreignkeys 返回引用主键的外键,这些主键在链接服务器中的表上。
sp_primarykeys 返回指定远程表的主键列,每个键列占一行。

扩展存储过程:
xp_sendmail 向指定的收件人发送邮件和查询结果集附件。
xp_startmail 启动 SQL 邮件客户端会话。
xp_cmdshell 以操作系统命令行解释器的方式执行给定的命令字符串,并以文本行方式返回任何输出。授予非管理用户执行xp_cmdshell 的权限。

用户定义的存储过程:(User-defined stored Procedure),这个就是用户在具体的数据库中自己定义的,名字最好不要以sp_和xp_开头,防止混乱。

注意事项:
1.在存储过程中,有些建立对象的语句是不可使用的:create default,create trigger,create procedure,create view,create rule.
2.在同一数据库中,不同的所有者可以建立相同名称的对象名。例如:a.sample,b.sample,c.sample三个数据表可以同时存在。如果存储过程中未指明对象的所有者(例如存储过程中的语句select * from sample,这句中的sample没有指明所有者),在执行的过程中默认的所有者查找顺序是:相应的存储过程的建立者->相应数据库的所有者。如果这个查找过程中没有把所有者确定下来,系统就要报错。
(这里我额外插一句:如果需要严密的数据操作,在任何操作中尽量加上所有者,例如leijun.sample)
3.在存储过程名称前边添加#或者##,所建立的存储过程则是“临时存储过程“(#是局部临时存储过程,##是全局临时存储过程)。
参考技术A 补充一下:许多管理和信息活动可以通过系统存储过程执行。系统存储过程按这些分类分组
sp开头的一般是Active Directory 过程、目录过程、游标过程、数据库维护计划过程、分布式查询过程、全文检索过程、日志传送过程、OLE 自动化扩展存储过程、复制过程、安全过程、SQL 事件探查器过程、SQL Server 代理程序过程、系统过程、Web 助手过程、XML 过程
xp开头的是常规扩展过程、SQL Server 代理程序过程
参考技术B 简单的小例子CREATE PROCEDURE testPro
AS
/**//* 事务开始 */
BEGIN TRANSACTION tran_test

/**//* 保存事务 */
SAVE TRANSACTION tran_test

/**//*数据操作 */
INSERT [table1] ( [content] ) VALUES ( '43332' )

/**//*提交事务 */
COMMIT TRANSACTION tran_test

/**//*判断是否有错误 */
IF ( @@ERROR <> 0 )
BEGIN
/**//*自定义错误输出
RAISERROR( 'Insert data error!',16,1 )
/**//* 事务回滚 */
ROLLBACK TRANSACTION tran_test
END

/**//* 判断事务数是否大于0 */
IF ( @@TRANCOUNT > 0 )
BEGIN
/**//* 事务回滚 */
ROLLBACK TRANSACTION tran_test
END
GO

SQL Sever数据常见问题

一、执行存储过程内存持续不下降,解决方案。

ALTER procedure [dbo].[ClearMemory]   
as
begin 
--清除所有缓存 
DBCC FREEPROCCACHE
DBCC FREESESSIONCACHE
DBCC FREESYSTEMCACHE(‘All‘)
DBCC DROPCLEANBUFFERS
--打开高级配置 
exec sp_configure ‘show advanced options‘, 1 
--设置最大内存值,清除现有缓存空间 
exec sp_configure ‘max server memory‘, 512 
EXEC (‘RECONFIGURE‘) 
--设置等待时间 
WAITFOR DELAY ‘00:00:01‘ 
--重新设置最大内存值 
EXEC  sp_configure ‘max server memory‘, 6000 
EXEC (‘RECONFIGURE‘) 
--关闭高级配置 
exec sp_configure ‘show advanced options‘,0
end 

二、SQL Server 阻止了对组件 ‘Ad Hoc Distributed Queries‘ 的 STATEMENT ‘OpenRowset...

错误:消息15281,级别16,状态1,第1 行  SQL Server 阻止了对组件‘Ad Hoc Distributed Queries‘ 的STATEMENT ‘OpenRowset/OpenDatasource‘ 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用sp_configure 启用‘Ad Hoc Distributed Queries‘。有关启用‘Ad Hoc Distributed Queries‘ 的详细信息,请参阅SQL Server 联机丛书中的"外围应用配置器"。

解决办法:  --启用Ad Hoc Distributed Queries:新建查询,输入

 exec sp_configure ‘show advanced options‘,1

reconfigure

exec sp_configure ‘Ad Hoc Distributed Queries‘,1

reconfigure

 

--使用完成后,关闭Ad Hoc Distributed Queries:

exec sp_configure ‘Ad Hoc Distributed Queries‘,0

reconfigure

exec sp_configure ‘show advanced options‘,0
reconfigure  

 

  





















以上是关于关于sql sever 的系统存储过程的主要内容,如果未能解决你的问题,请参考以下文章

sql sever实现存储过程

sql sever的sql语句有关存储过程与触发器

如何找到自定义角色具有执行权限的存储过程? SQL SEVER

关于存储过程

sql中创建关于更新的存储过程

关于SQLSERVER存储过程的问题,求解