SQL Server常用的系统存储过程应用实例(转)

摘要:Sql Server自带的系统存储过程有许多,但大部分我们是不常用的。我在实践中根据自己的体会,总结整理了一些比较常用的,加上一些实例介绍给大家。本期介绍:
l         sp_attach_db
l         sp_attach_single_file_db
l         sp_changedbowner
l         sp_changeobjectowner
l         sp_column_privileges
卸载oracle 10i-关于oracle 10g卸载问题
某数据集团数据库初试笔试题(数据库面试)
数据库面试(Oracle与Sql专题)
Oracle性能调优原则
常用数据库面试题
某门户网站数据库Oracle笔试题(DBA职位)
SQL Server笔试题 解答
Oracle面试(DBA For oracle数据库)
数据库设计技巧 14则
成就DBA职业生涯(中文翻译版)
1.1.        sp_attach_db
将数据库附加到服务器。
语法
sp_attach_db [ @dbname = ]’dbname’, [ @filename1 = ]’filename_n’ [ ,...16 ]
参数
[@dbname =]’dbname’  。
要附加到服务器的数据库的名称。该名称必须是唯一的。Dbname 的数据类型为 sysname,默认值为 NULL。
[@filename1 =]’filename_n’
数据库文件的物理名称,包括路径。Filename_n 的数据类型为 nvarchar(260),默认值为 NULL。最多可以指定 16 个文件名。参数名称以 @filename1 开始,递增到 @filename16。文件名列表至少必须包括主文件,主文件包含指向数据库中其它文件的系统表。该列表还必须包括数据库分离后所有被移动的文件。
返回代码值
0(成功)或 1(失败)
结果集

注释
只应对以前使用显式 sp_detach_db 操作从数据库服务器分离的数据库执行 sp_attach_db。如果必须指定多于 16 个文件,请使用带有 FOR ATTACH 子句的 Create DATABASE。
如果将数据库附加到的服务器不是该数据库从中分离的服务器,并且启用了分离的数据库以进行复制,则应该运行 sp_removedbreplication 从数据库删除复制。
权限
只有 sysadmin 和 dbcreator 固定服务器角色的成员才能执行本过程。
实例
如何从一台电脑上把SQL server数据库test拷贝到另外一台SQL server电脑上使用?
1. 先拷贝数据库test的两个文件,如:
D:\Program Files\Microsoft SQL Server\MSSQL\data\test.MDF 和
D:\Program Files\Microsoft SQL Server\MSSQL\data\test.LDF
2. 再执行:
EXEC sp_attach_db @dbname = N'test',
@filename1 = N'D:\Program Files\Microsoft SQL Server\MSSQL\data\test.MDF',
@filename2 = N'D:\Program Files\Microsoft SQL Server\MSSQL\data\test.LDF'
1.2.        sp_attach_single_file_db
将只有一个数据文件的数据库附加到当前服务器。
语法
sp_attach_single_file_db [ @dbname = ]’dbname’ , [ @physname = ]’physical_name’
参数
[@dbname =]’dbname’
要附加到服务器的数据库的名称。Dbname 的数据类型为 sysname,默认值为 NULL。
[@physname =]’phsyical_name’
据库文件的物理名称,包括数路径。Physical_name 的数据类型为 nvarchar(260),默认值为 NULL。
返回代码值
0(成功)或 1(失败)
结果集

注释
当使用 sp_attach_single_file_db 将数据库附加到服务器时,它创建一个新的日志文件并执行额外的清除工作,从新附加的数据库中删除复制。
仅对以前使用显式 sp_detach_db 操作从服务器分离的数据库执行 sp_attach_single_file_db。
权限
只有 sysadmin 和 dbcreator 固定服务器角色的成员才能执行本过程。
实例
我们也可以通过下列方法实现:如何从一台电脑上把SQL server数据库test拷贝到另外一台SQL server电脑上使用。
1. 只拷贝数据库test的一个文件,如:
D:\Program Files\Microsoft SQL Server\MSSQL\data\test.MDF
2. 再执行:
EXEC sp_attach_single_file_db @dbname = N'test',
@physname = N'D:\Program Files\Microsoft SQL Server\MSSQL\data\test.MDF'
1.3.        sp_changedbowner
更改当前数据库的所有者。
语法
sp_changedbowner [ @loginame = ]’login’  [ , [ @map = ] remap_alias_flag ]
参数
[@loginame =]’login’
当前数据库新所有者的登录 ID。login 的数据类型为 sysname,没有默认值。Login 必须是已存在的 Microsoft® SQL Server™ 登录或 Microsoft Windows NT® 用户。如果 login 通过当前数据库内的现有别名或用户安全帐户已拥有访问该数据库的权限,则不能成为该数据库的所有者。为了避免这种情况,应先除去当前数据库中的别名或用户。
[@map =] remap_alias_flag
值为 true 或 false,表示旧数据库所有者 (dbo) 的现有别名是映射到当前数据库的新所有者还是要除去。Remap_alias_flag 的数据类型为 varchar(5),默认值为 NULL,表示旧 dbo 的任何现有别名均映射到当前数据库的新所有者。False 表示除去旧数据库所有者的现有别名。
返回代码值
0(成功)或 1(失败)
注释
执行 sp_changedbowner 之后,新所有者称为数据库中的 dbo 用户。Dbo 拥有执行数据库中所有活动的暗示性权限。
不能更改 master、model 或 tempdb 系统数据库的所有者。
若要显示有效 login 值的列表,请执行 sp_helplogins 存储过程。
执行只有 login 参数的 sp_changedbowner 会将数据库所有权改为 login,并将先前别名为 dbo 的用户别名映射到新数据库所有者。
权限
只有 sysadmin 固定服务器角色成员的成员或当前数据库的所有者才能执行 sp_changedbowner。
实例
当你不想让其他应用使用sa登陆SQL server的test数据库时,可以建立一个新的登陆名称如user01,然后将需要访问的数据库的所有者更改为user01即可。如:
Use test
go
Sp_changedbowner ’user01’
go
1.4.        sp_changeobjectowner
更改当前数据库中对象的所有者。
语法
sp_changeobjectowner [ @objname = ]’object’ , [ @newowner = ]’owner’
参数
[@objname =]’object’
当前数据库中现有的表、视图或存储过程的名称。Object 的数据类型为 nvarchar(517),没有默认值。Object 可用现有对象所有者限定,格式为 existing_owner.object。
[@newowner =]’owner’
即将成为对象的新所有者的安全帐户的名称。Owner 的数据类型为 sysname,没有默认值。Owner 必须是当前数据库中有效的 Microsoft® SQL Server™ 用户或角色或 Microsoft Windows NT® 用户或组。指定 Windows NT 用户或组时,请指定 Windows NT 用户或组在数据库中已知的名称(用 sp_grantdbaccess 添加)。
返回代码值
0(成功)或 1(失败)
注释
对象所有者(或拥有对象的组或角色的成员)对对象有特殊的权限。对象所有者可以执行任何与对象有关的 Transact-SQL 语句(例如 Insert、Update、Delete、Select 或 EXECUTE),也可以管理对象的权限。
如果拥有对象的安全帐户必须要除去,但同时要保留该对象,请使用 sp_changeobjectowner 更改对象所有者。该过程从对象中删除所有现有权限。在运行 sp_changeobjectowner 之后,需要重新应用要保留的任何权限。
由于这个原因,建议在运行 sp_changeobjectowner 之前,编写现有权限的脚本。一旦更改了对象的所有权,可能要使用该脚本重新应用权限。在运行该脚本之前需要在权限脚本中修改对象所有者。
可以使用 sp_changedbowner 更改数据库的所有者。
权限
只有 sysadmin 固定服务器角色和 db_owner 固定数据库角色成员,或既是 db_ddladmin 固定数据库角色又是 db_securityadmin 固定数据库角色的成员,才能执行 sp_changeobjectowner。
实例
将表testtable的所有者修改为user02(假设已经存在),执行:
sp_changeobjectowner ’testtable’,’user02’
这样若以非user02登陆的连接,就不能直接看到testtable表中的数据了.但是若有读取权限可以使用user01前缀,如:
Select * from user01.testtable
1.5.        sp_column_privileges
返回当前环境中单个表的列特权信息。
语法
sp_column_privileges [ @table_name = ]’table_name’
         [ , [ @table_owner = ]’table_owner’ ]
         [ , [ @table_qualifier = ]’table_qualifier’ ]
         [ , [ @column_name = ]’column’ ]
参数
[@table_name =]’table_name’
用来返回目录信息的表。Table_name 的数据类型为 sysname,没有默认值。不支持通配符模式匹配。
[@table_owner =]’table_owner’
是用于返回目录信息的表所有者。Table_owner 的数据类型为 sysname,默认值为 NULL。不支持通配符模式匹配。如果没有指定 table_owner,则应用基础数据库管理系统 (DBMS) 默认的表的可视性规则。
在 Microsoft® SQL Server™ 中,如果当前用户拥有的表具有指定名称,则返回该表的列。如果没有指定 table_owner,并且当前用户不拥有指定 table_name 的表,则 sp_column_privileges 搜索数据库所有者拥有的指定 table_name 的表。如果有,则返回该表的列。
[@table_qualifier =]’table_qualifier’
是表限定符的名称。Table_qualifier 的数据类型为 sysname,默认值为 NULL。多种 DBMS 产品支持表的三部分命名方式 (qualifier.owner.name)。在 SQL Server 中,该列表示数据库名。在某些产品中,该列表示表所在数据库环境的服务器名。
[@column_name =]’column’
是只获得一列目录信息时所使用的单个列。Column 的数据类型为 nvarchar(384),默认值为 NULL。如果没有指定 column,将返回所有列。在 SQL Server 中,column 表示在 syscolumns 表中列出的列名。使用基础 DBMS 的通配符匹配模式,column 可以包含通配符。若要获得最佳的互操作性,网关客户端应假定只有 SQL-92 标准模式匹配(% 和 _ 通配符)。
结果集
sp_column_privileges 与 ODBC 中的 SQLColumnPrivileges 等价。返回的结果按 TABLE_QUALIFIER、TABLE_OWNER、TABLE_NAME、COLUMN_NAME 和 PRIVILEGE排序。
列名
数据类型
描述
TABLE_QUALIFIER
sysname
表限定符名称。该字段可以为 NULL。
TABLE_OWNER
sysname
表所有者名称。该字段始终返回值。
TABLE_NAME
sysname
表名。该字段始终返回值。
COLUMN_NAME
sysname
所返回的 TABLE_NAME 每列的列名。该字段始终返回值。
GRANTOR
sysname
将 COLUMN_NAME 上的权限授予所列 GRANTEE 的数据库用户名。在 SQL Server 中,该列总是和 TABLE_OWNER 相同。该字段始终返回值。
GRANTOR 列可以是数据库所有者 (TABLE_OWNER) 或数据库所有者通过 GRANT 语句中的 WITH GRANT OPTION 子句对其授予权限的用户。
GRANTEE
sysname
由所列 GRANTOR 授予 COLUMN_NAME 上的权限的数据库用户名。在 SQL Server 中,该列总是包括来自 sysusers 表的数据库用户。该字段始终返回值。
PRIVILEGE
varchar(32)
可用列权限中的一个。列权限可以是下列值中的一个(或定义执行时数据源支持的其它值):
Select = GRANTEE 可以检索列的数据。
Insert = GRANTEE 向表插入新行时可以为该列提供数据。
Update = GRANTEE 可以修改列中的现有数据。
REFERENCES = GRANTEE 可以引用主键/外键关系中外表中的列。主键/外键关系使用表约束定义。
IS_GRANTABLE
varchar(3)
指出是否允许 GRANTEE 为其他用户授予权限,经常称为"授予再授予 (grant with grant)"。可以是 YES、NO 或 NULL。未知的(或 NULL)值引用不能使用"授予再授予 (grant with grant)"的数据源。
注释
对于 SQL Server,可以用 GRANT 语句授予权限,用 REVOKE 语句除去权限。
权限
执行许可权限默认授予 public 角色。
实例
显示表test中各列的特权信息:
sp_column_privileges testable
test    dbo testtable   id  dbo dbo Insert  YES
test    dbo testtable   id  dbo dbo REFERENCES  YES
test    dbo testtable   id  dbo dbo Select  YES
test    dbo testtable   id  dbo dbo Update  YES
test    dbo testtable   name    dbo dbo Insert  YES
test    dbo testtable   name    dbo dbo REFERENCES  YES
test    dbo testtable   name    dbo dbo Select  YES
test    dbo testtable   name    dbo dbo Update  YES
阅读本站更多 Sql Server 相关文章:
《通用高效分页存储过程代码》
《一个高效的数据分页的存储过程 可以轻松应付百万数据》
千万数量级分页存储过程
存储过程编写经验和优化措施
使用SQL存储过程要特别注意的问题-注意顺序读取
在项目中该不该使用存储过程代替SQL语句?
SQL 语句中的通配符
SQL Server系统存储过程sp_changeobjectowner
Sql Server一个未公开的存储过程
Sql Server一个未公开的存储过程——sp_Msforeachtable
Sql Server一个未公开的存储过程——sp_Msforeachdb
Sql Server一个未公开的存储过程——sp_Msforeach_worker
高效SQL——合并多个字段值或多条记录
使用SQL存储过程要特别注意的问题-注意顺序读取
分享:SQL 2005安装心得
Asp SQL注入天书-ASP注入漏洞全接触
链接服务器的配置和使用(SQL Server)
SQL Server 2005数据库开发(VS 2005)(一)
SQL Server 2005数据库开发(VS 2005)(二)
SQL Server 2005数据库开发(VS 2005)(三)
Sql存储过程加密和解密
SQL语句中的通配符
MySQL数据库存储引擎详解
某外企DBA职位的SQL Server面试题(数据库面试题)
Apache+Mysql+Php+ssl服务器DIY之完全安装攻略
数据库面试(Oracle与Sql专题)
SQL Server常用的系统存储过程应用实例
SQL Server三个常见错误分析及解决(SQL Server连接)

转载于:https://www.cnblogs.com/Ext0755/archive/2010/11/20/1882640.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/475832.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

angular 权限 php,PHP,Angular,HTACCESS-仅允许来自源域的请求

我完成了我的角度项目。在我的项目中,我向PHP文件发送带有数据的POST请求,然后将结果返回给Angular。现在我只允许来自源域的请求,并拒绝来自任何域的请求。我尝试使用:header("Access-Control-Allow-Origin: example.com");但不管…

LeetCode 516. 最长回文子序列(动态规划)

1. 题目 给定一个字符串s,找到其中最长的回文子序列。可以假设s的最大长度为1000。 示例 1: 输入: "bbbab" 输出: 4 一个可能的最长回文子序列为 "bbbb"。示例 2: 输入: "cbbd" 输出: 2 一个可能的最长回文子序列为 "bb"…

点击图片,AJAX删除后台图片文件

点击页面上的图片&#xff0c;用jQuery的AJAX来删除后台真实的文件。包含了2个页面&#xff0c;一个是显示图片的页面&#xff0c;一个是传递文件名&#xff0c;然后删除真实图片的页面。具体的代码如下&#xff1a;ShowPics.htm:<!DOCTYPE html PUBLIC "-//W3C//DTD X…

granule size oracle,_ksmg_granule_size oracle内存分配粒度

_ksmg_granule_size oracle内存分配粒度_ksmg_granule_size:内存分配粒度大小oracle内存分配的最小单位&#xff0c;最终分配的内存数量都是这个参数的整数倍10g中这个参数的大小一般遵循如下原则&#xff1a;– sga_max_size < 1024M then _ksmg_granule_size 4M- sga_ma…

LeetCode 第 26 场双周赛(363/1971,前18.4%)

文章目录1. 比赛结果2. 题目1. LeetCode 5396. 连续字符 easy2. LeetCode 5397. 最简分数 medium3. LeetCode 5398. 统计二叉树中好节点的数目 medium4. LeetCode 5399. 数位成本和为目标值的最大数字 hard1. 比赛结果 做出来了 1、2、3 题&#xff0c;19分钟做出来3题&#x…

世界是个班,美国是班长,中国是团支书(太经典了!)

1。美国 班长&#xff0c;家里有钱&#xff0c;人长得也强壮&#xff0c;学习成绩很好但也爱打架&#xff0c;做事蛮横无理&#xff0c;班里同学一般都不敢顶撞他。和副班长关系不好。 2。俄罗斯 副班长&#xff0c;学习成绩好&#xff0c;全班最高大&#xff0c;上学期光和班长…

蛤蟆 Oracle,47.蛤蟆笔记go——go连接Oracle

47.蛤蟆笔记go——go连接Oracle在连接ORACLE数据库之前我们先来看下一个概念OCI。ociORACLE调用接口(Oracle Call Interface简称OCI)提供了一组可对ORACLE数据库进行存取的接口子例程(函数)&#xff0c;通过在第三代程序设计语言(如C语言)中进行调用可达到存取ORACLE数据库的目…

LeetCode 1450. 在既定时间做作业的学生人数

1. 题目 给你两个整数数组 startTime&#xff08;开始时间&#xff09;和 endTime&#xff08;结束时间&#xff09;&#xff0c;并指定一个整数 queryTime 作为查询时间。 已知&#xff0c;第 i 名学生在 startTime[i] 时开始写作业并于 endTime[i] 时完成作业。 请返回在查…

linux系统限制内存使用率,linux中限制CPU和内存占用率方法

在linux中CPU与内存占用率限制的方法有几种我这里整理常用的两种&#xff0c;希望文章对各位同学会有所帮助哦。查看cpu占用在命令行中输入 “top”即可启动 toptop 的全屏对话模式可分为3部分&#xff1a;系统信息栏、命令输入栏、进程列表栏。使用top查看系统负荷top命令可以…

实现Table多类不同数据类型的排序(顺反)

JS如下&#xff1a; var TableUtil new Object(); TableUtil.Convert function(sValue,sDataType){ switch(sDataType) { case "int": return parseInt(sValue); case "float": return parseFloat(sValue); …

LeetCode 1451. 重新排列句子中的单词(桶排序)

1. 题目 「句子」是一个用空格分隔单词的字符串。给你一个满足下述格式的句子 text : 句子的首字母大写text 中的每个单词都用单个空格分隔。 请你重新排列 text 中的单词&#xff0c;使所有单词按其长度的升序排列。 如果两个单词的长度相同&#xff0c;则保留其在原句子中…

Linux系统服务器停服,Linux系统服务启动和停止

systemd 是在Linux上运行服务的新方式。 systemd 有一个被替代的 sysvinit 。 systemd为Linux带来更快的启动时间&#xff0c;现在是管理Linux服务的标准方式。虽然稳定&#xff0c; systemd 仍在不断发展。systemd 作为init系统&#xff0c;用于管理Linux内核引导后需要更改状…

如何计算MP3总时长的问题(三)--对于变比特率MP3求总时长

3、变比特率MP3总时长求解 之前我们所讨论的都是对于一个固定比特率&#xff08;CBR&#xff09;的MP3进行求总时长&#xff0c;由于固定比特率的特殊性&#xff0c;很容易第一帧的帧头就能知道整个MP3的信息&#xff0c;但是对于变比特率&#xff08;VBR&#xff09;的MP3&…

LeetCode 1452. 收藏清单(std::includes判断子集)

1. 题目 给你一个数组 favoriteCompanies &#xff0c;其中 favoriteCompanies[i] 是第 i 名用户收藏的公司清单&#xff08;下标从 0 开始&#xff09;。 请找出不是其他任何人收藏的公司清单的子集的收藏清单&#xff0c;并返回该清单下标。下标需要按升序排列。 示例 1&a…

2011年值得注意的5个设计趋势

在过去的12个月里&#xff0c;我们已经看到Web设计领域发生了许多变化。 包括智能手机和平板电脑(如iPad)这些移动设备的日渐普及已经改变了用户对内容的访问和交互方式。还有&#xff0c;像HTML5、web字体和CSS这些新标准的正式通过意味着越来越多的用户可以使用网络上最新最强…

linux内核线程绑定到单个核,linux 将进程或者线程绑定到指定的cpu上

基本概念cpu亲和性(affinity)CPU的亲和性&#xff0c; 就是进程要在指定的 CPU 上尽量长时间地运行而不被迁移到其他处理器&#xff0c;也称为CPU关联性&#xff1b;再简单的点的描述就将指定的进程或线程绑定到相应的cpu上&#xff1b;在多核运行的机器上&#xff0c;每个CPU本…

LeetCode 1453. 圆形靶内的最大飞镖数量(几何题)

1. 题目 墙壁上挂着一个圆形的飞镖靶。现在请你蒙着眼睛向靶上投掷飞镖。 投掷到墙上的飞镖用二维平面上的点坐标数组表示。飞镖靶的半径为 r 。 请返回能够落在 任意 半径为 r 的圆形靶内或靶上的最大飞镖数。 示例 1&#xff1a; 输入&#xff1a;points [[-2,0],[2,0…

熟悉linux运行环境,实验一 熟悉Ubuntu环境

实验一熟悉Ubuntu环境【实验目的】1&#xff0e;了解Ubuntu系统基本操作方法&#xff0c;学会独立使用该系统。2&#xff0e;熟悉Ubuntu下如何编辑、编译和运行一个C语言程序。3&#xff0e;学会利用gcc、gdb编译、调试C程序。【预习内容】1&#xff0e;预习Ubuntu下各种应用程…

Pandas入门1(DataFrame+Series读写/Index+Select+Assign)

文章目录1. Creating, Reading and Writing1.1 DataFrame 数据框架1.2 Series 序列1.3 Reading 读取数据2. Indexing, Selecting, Assigning2.1 类python方式的访问2.2 Pandas特有的访问方式2.2.1 iloc 基于index访问2.2.2 loc 基于label标签访问2.3 set_index() 设置索引列2.4…

关于Visual C#.NET数据库开发经典案例解析(附光盘两张)(珍藏版)—的读后感...

关于Visual C#.NET数据库开发经典案例解析&#xff08;附光盘两张&#xff09;&#xff08;珍藏版&#xff09;— 评论读后感&#xff1a;里面的内容很经典&#xff0c;很实用读后感&#xff1a;给初学者是好&#xff0c;但是是比较旧的了&#xff01;VS2003 C/S的读后感&#…