日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

發(fā)布時(shí)間:2025/7/14 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL Server常用的系统存储过程应用实例 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
摘要:Sql Server自帶的系統(tǒng)存儲(chǔ)過程有許多,但大部分我們是不常用的。我在實(shí)踐中根據(jù)自己的體會(huì),總結(jié)整理了一些比較常用的,加上一些實(shí)例介紹給大家。本期介紹: l???????? sp_attach_db l???????? sp_attach_single_file_db l???????? sp_changedbowner l???????? sp_changeobjectowner l???????? sp_column_privileges 1.1.??????? sp_attach_db 將數(shù)據(jù)庫附加到服務(wù)器。 語法 sp_attach_db [ @dbname= ]’dbname’, [ @filename1 = ]’filename_n[ ,...16 ] 參數(shù) [@dbname =]’dbname 要附加到服務(wù)器的數(shù)據(jù)庫的名稱。該名稱必須是唯一的。dbname 的數(shù)據(jù)類型為 sysname,默認(rèn)值為 NULL。 [@filename1 =]’filename_n 數(shù)據(jù)庫文件的物理名稱,包括路徑。filename_n 的數(shù)據(jù)類型為 nvarchar(260),默認(rèn)值為 NULL。最多可以指定 16 個(gè)文件名。參數(shù)名稱以 @filename1 開始,遞增到 @filename16。文件名列表至少必須包括主文件,主文件包含指向數(shù)據(jù)庫中其它文件的系統(tǒng)表。該列表還必須包括數(shù)據(jù)庫分離后所有被移動(dòng)的文件。 返回代碼值 0(成功)或 1(失敗) 結(jié)果集注釋 只應(yīng)對(duì)以前使用顯式 sp_detach_db 操作從數(shù)據(jù)庫服務(wù)器分離的數(shù)據(jù)庫執(zhí)行 sp_attach_db。如果必須指定多于 16 個(gè)文件,請(qǐng)使用帶有 FOR ATTACH 子句的 CREATE DATABASE。 如果將數(shù)據(jù)庫附加到的服務(wù)器不是該數(shù)據(jù)庫從中分離的服務(wù)器,并且啟用了分離的數(shù)據(jù)庫以進(jìn)行復(fù)制,則應(yīng)該運(yùn)行 sp_removedbreplication 從數(shù)據(jù)庫刪除復(fù)制。 權(quán)限 只有 sysadmindbcreator 固定服務(wù)器角色的成員才能執(zhí)行本過程。 實(shí)例 如何從一臺(tái)電腦上把SQL server數(shù)據(jù)庫test拷貝到另外一臺(tái)SQL server電腦上使用? 1. 先拷貝數(shù)據(jù)庫test的兩個(gè)文件,如: D:\Program Files\Microsoft SQL Server\MSSQL\data\test.MDF 和 D:\Program Files\Microsoft SQL Server\MSSQL\data\test.LDF 2. 再執(zhí)行: 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 將只有一個(gè)數(shù)據(jù)文件的數(shù)據(jù)庫附加到當(dāng)前服務(wù)器。 語法 sp_attach_single_file_db [ @dbname = ]’dbname’?, [ @physname = ]’physical_name 參數(shù) [@dbname =]’dbname 要附加到服務(wù)器的數(shù)據(jù)庫的名稱。dbname 的數(shù)據(jù)類型為 sysname,默認(rèn)值為 NULL。 [@physname =]’phsyical_name 據(jù)庫文件的物理名稱,包括數(shù)路徑。physical_name 的數(shù)據(jù)類型為 nvarchar(260),默認(rèn)值為 NULL。 返回代碼值 0(成功)或 1(失敗) 結(jié)果集注釋 當(dāng)使用 sp_attach_single_file_db 將數(shù)據(jù)庫附加到服務(wù)器時(shí),它創(chuàng)建一個(gè)新的日志文件并執(zhí)行額外的清除工作,從新附加的數(shù)據(jù)庫中刪除復(fù)制。 僅對(duì)以前使用顯式 sp_detach_db 操作從服務(wù)器分離的數(shù)據(jù)庫執(zhí)行 sp_attach_single_file_db權(quán)限 只有 sysadmindbcreator 固定服務(wù)器角色的成員才能執(zhí)行本過程。 實(shí)例 我們也可以通過下列方法實(shí)現(xiàn):如何從一臺(tái)電腦上把SQL server數(shù)據(jù)庫test拷貝到另外一臺(tái)SQL server電腦上使用。 1. 只拷貝數(shù)據(jù)庫test的一個(gè)文件,如: D:\Program Files\Microsoft SQL Server\MSSQL\data\test.MDF 2. 再執(zhí)行: 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 更改當(dāng)前數(shù)據(jù)庫的所有者。 語法 sp_changedbowner [ @loginame = ]’login??[ , [ @map = ] remap_alias_flag ] 參數(shù) [@loginame =]’login 當(dāng)前數(shù)據(jù)庫新所有者的登錄 ID。login 的數(shù)據(jù)類型為 sysname,沒有默認(rèn)值。login 必須是已存在的 Microsoft? SQL Server? 登錄或 Microsoft Windows NT? 用戶。如果 login 通過當(dāng)前數(shù)據(jù)庫內(nèi)的現(xiàn)有別名或用戶安全帳戶已擁有訪問該數(shù)據(jù)庫的權(quán)限,則不能成為該數(shù)據(jù)庫的所有者。為了避免這種情況,應(yīng)先除去當(dāng)前數(shù)據(jù)庫中的別名或用戶。 [@map =] remap_alias_flag 值為 truefalse,表示舊數(shù)據(jù)庫所有者 (dbo) 的現(xiàn)有別名是映射到當(dāng)前數(shù)據(jù)庫的新所有者還是要除去。remap_alias_flag 的數(shù)據(jù)類型為 varchar(5),默認(rèn)值為 NULL,表示舊 dbo 的任何現(xiàn)有別名均映射到當(dāng)前數(shù)據(jù)庫的新所有者。false 表示除去舊數(shù)據(jù)庫所有者的現(xiàn)有別名。 返回代碼值 0(成功)或 1(失敗) 注釋 執(zhí)行 sp_changedbowner 之后,新所有者稱為數(shù)據(jù)庫中的 dbo 用戶。dbo 擁有執(zhí)行數(shù)據(jù)庫中所有活動(dòng)的暗示性權(quán)限。 不能更改 mastermodeltempdb 系統(tǒng)數(shù)據(jù)庫的所有者。 若要顯示有效 login 值的列表,請(qǐng)執(zhí)行 sp_helplogins 存儲(chǔ)過程。 執(zhí)行只有 login 參數(shù)的 sp_changedbowner 會(huì)將數(shù)據(jù)庫所有權(quán)改為 login,并將先前別名為 dbo 的用戶別名映射到新數(shù)據(jù)庫所有者。 權(quán)限 只有 sysadmin 固定服務(wù)器角色成員的成員或當(dāng)前數(shù)據(jù)庫的所有者才能執(zhí)行 sp_changedbowner實(shí)例 當(dāng)你不想讓其他應(yīng)用使用sa登陸SQL server的test數(shù)據(jù)庫時(shí),可以建立一個(gè)新的登陸名稱如user01,然后將需要訪問的數(shù)據(jù)庫的所有者更改為user01即可。如: Use test go Sp_changedbowner ’user01’ go 1.4.??????? sp_changeobjectowner 更改當(dāng)前數(shù)據(jù)庫中對(duì)象的所有者。 語法 sp_changeobjectowner [ @objname = ]’object’ , [ @newowner = ]’owner 參數(shù) [@objname =]’object 當(dāng)前數(shù)據(jù)庫中現(xiàn)有的表、視圖或存儲(chǔ)過程的名稱。object 的數(shù)據(jù)類型為 nvarchar(517),沒有默認(rèn)值。object 可用現(xiàn)有對(duì)象所有者限定,格式為 existing_owner.object。 [@newowner =]’owner 即將成為對(duì)象的新所有者的安全帳戶的名稱。owner 的數(shù)據(jù)類型為 sysname,沒有默認(rèn)值。owner 必須是當(dāng)前數(shù)據(jù)庫中有效的 Microsoft? SQLServer? 用戶或角色或 Microsoft Windows NT? 用戶或組。指定 Windows NT 用戶或組時(shí),請(qǐng)指定 Windows NT 用戶或組在數(shù)據(jù)庫中已知的名稱(用 sp_grantdbaccess 添加)。 返回代碼值 0(成功)或 1(失敗) 注釋 對(duì)象所有者(或擁有對(duì)象的組或角色的成員)對(duì)對(duì)象有特殊的權(quán)限。對(duì)象所有者可以執(zhí)行任何與對(duì)象有關(guān)的 Transact-SQL 語句(例如 INSERT、UPDATE、DELETE、SELECT 或 EXECUTE),也可以管理對(duì)象的權(quán)限。 如果擁有對(duì)象的安全帳戶必須要除去,但同時(shí)要保留該對(duì)象,請(qǐng)使用 sp_changeobjectowner 更改對(duì)象所有者。該過程從對(duì)象中刪除所有現(xiàn)有權(quán)限。在運(yùn)行 sp_changeobjectowner 之后,需要重新應(yīng)用要保留的任何權(quán)限。 由于這個(gè)原因,建議在運(yùn)行 sp_changeobjectowner 之前,編寫現(xiàn)有權(quán)限的腳本。一旦更改了對(duì)象的所有權(quán),可能要使用該腳本重新應(yīng)用權(quán)限。在運(yùn)行該腳本之前需要在權(quán)限腳本中修改對(duì)象所有者。 可以使用 sp_changedbowner 更改數(shù)據(jù)庫的所有者。 權(quán)限 只有 sysadmin 固定服務(wù)器角色和 db_owner 固定數(shù)據(jù)庫角色成員,或既是 db_ddladmin 固定數(shù)據(jù)庫角色又是 db_securityadmin 固定數(shù)據(jù)庫角色的成員,才能執(zhí)行 sp_changeobjectowner實(shí)例 將表testtable的所有者修改為user02(假設(shè)已經(jīng)存在),執(zhí)行: sp_changeobjectowner ’testtable’,’user02’ 這樣若以非user02登陸的連接,就不能直接看到testtable表中的數(shù)據(jù)了.但是若有讀取權(quán)限可以使用user01前綴,如: Select * from user01.testtable 1.5.??????? sp_column_privileges 返回當(dāng)前環(huán)境中單個(gè)表的列特權(quán)信息。 語法 sp_column_privileges [ @table_name = ]’table_name
??[ , [ @table_owner = ]’table_owner]
?????? ??[ , [ @table_qualifier = ]’table_qualifier]
?????? ??[ , [ @column_name = ]’column] 參數(shù) [@table_name =]’table_name 用來返回目錄信息的表。table_name 的數(shù)據(jù)類型為 sysname,沒有默認(rèn)值。不支持通配符模式匹配。 [@table_owner =]’table_owner 是用于返回目錄信息的表所有者。table_owner 的數(shù)據(jù)類型為 sysname,默認(rèn)值為 NULL。不支持通配符模式匹配。如果沒有指定 table_owner,則應(yīng)用基礎(chǔ)數(shù)據(jù)庫管理系統(tǒng) (DBMS) 默認(rèn)的表的可視性規(guī)則。 在 Microsoft? SQL Server? 中,如果當(dāng)前用戶擁有的表具有指定名稱,則返回該表的列。如果沒有指定 table_owner,并且當(dāng)前用戶不擁有指定 table_name 的表,則 sp_column_privileges 搜索數(shù)據(jù)庫所有者擁有的指定 table_name 的表。如果有,則返回該表的列。 [@table_qualifier =]’table_qualifier 是表限定符的名稱。table_qualifier 的數(shù)據(jù)類型為 sysname,默認(rèn)值為 NULL。多種 DBMS 產(chǎn)品支持表的三部分命名方式 (qualifier.owner.name)。在 SQL Server 中,該列表示數(shù)據(jù)庫名。在某些產(chǎn)品中,該列表示表所在數(shù)據(jù)庫環(huán)境的服務(wù)器名。 [@column_name =]’column 是只獲得一列目錄信息時(shí)所使用的單個(gè)列。column 的數(shù)據(jù)類型為 nvarchar(384),默認(rèn)值為 NULL。如果沒有指定 column,將返回所有列。在 SQL Server 中,column 表示在 syscolumns 表中列出的列名。使用基礎(chǔ) DBMS 的通配符匹配模式,column 可以包含通配符。若要獲得最佳的互操作性,網(wǎng)關(guān)客戶端應(yīng)假定只有 SQL-92 標(biāo)準(zhǔn)模式匹配(% 和 _ 通配符)。 結(jié)果集 sp_column_privileges 與 ODBC 中的 SQLColumnPrivileges 等價(jià)。返回的結(jié)果按 TABLE_QUALIFIERTABLE_OWNERTABLE_NAMECOLUMN_NAMEPRIVILEGE排序。

列名 數(shù)據(jù)類型 描述
TABLE_QUALIFIER sysname 表限定符名稱。該字段可以為 NULL。
TABLE_OWNER sysname 表所有者名稱。該字段始終返回值。
TABLE_NAME sysname 表名。該字段始終返回值。
COLUMN_NAME sysname 所返回的 TABLE_NAME 每列的列名。該字段始終返回值。
GRANTOR sysname COLUMN_NAME 上的權(quán)限授予所列 GRANTEE 的數(shù)據(jù)庫用戶名。在 SQL Server 中,該列總是和 TABLE_OWNER 相同。該字段始終返回值。 GRANTOR 列可以是數(shù)據(jù)庫所有者 (TABLE_OWNER) 或數(shù)據(jù)庫所有者通過 GRANT 語句中的 WITH GRANT OPTION 子句對(duì)其授予權(quán)限的用戶。
GRANTEE sysname 由所列 GRANTOR 授予 COLUMN_NAME 上的權(quán)限的數(shù)據(jù)庫用戶名。在 SQL Server 中,該列總是包括來自 sysusers 表的數(shù)據(jù)庫用戶。該字段始終返回值。
PRIVILEGE varchar(32) 可用列權(quán)限中的一個(gè)。列權(quán)限可以是下列值中的一個(gè)(或定義執(zhí)行時(shí)數(shù)據(jù)源支持的其它值): SELECT = GRANTEE 可以檢索列的數(shù)據(jù)。 INSERT = GRANTEE 向表插入新行時(shí)可以為該列提供數(shù)據(jù)。 UPDATE = GRANTEE 可以修改列中的現(xiàn)有數(shù)據(jù)。 REFERENCES = GRANTEE 可以引用主鍵/外鍵關(guān)系中外表中的列。主鍵/外鍵關(guān)系使用表約束定義。
IS_GRANTABLE varchar(3) 指出是否允許 GRANTEE 為其他用戶授予權(quán)限,經(jīng)常稱為"授予再授予 (grant with grant)"。可以是 YES、NO 或 NULL。未知的(或 NULL)值引用不能使用"授予再授予 (grant with grant)"的數(shù)據(jù)源。
注釋 對(duì)于 SQL Server,可以用 GRANT 語句授予權(quán)限,用 REVOKE 語句除去權(quán)限。 權(quán)限 執(zhí)行許可權(quán)限默認(rèn)授予 public 角色。 實(shí)例 顯示表test中各列的特權(quán)信息: 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

轉(zhuǎn)載于:https://www.cnblogs.com/lds85930/archive/2007/07/19/823574.html

總結(jié)

以上是生活随笔為你收集整理的SQL Server常用的系统存储过程应用实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。