天天看點

SQL Server常用語句+注釋

--sp_revokedbaccess jacobean 删除目前資料庫中的jacobean賬戶

--sp_change_users_login 'Report' 顯示登入映射的目前使用者的報告

--sp_droprole sqladmin1 删除目前數庫中的sqladmin1角色

--sp_droprolemember 'sqladmin1','jacky' 從sqladmin1角色中,删除jacky這個賬戶

--sp_grantlogin 'nwtraders/sqladmin1'  建立登入SQL SERVER 的域使用者nwtraders/sqladmin1

--sp_revokelogin 'nwtraders/sqladmin2' 廢除域使用者nwtraders/sqladmin2登

     錄SQL SERVER 的權限,但不明确地阻止nwtraders/sqladmin2通路SQL SEVER,也

     就是表是,nwtraders/sqladmin2這個賬戶,還可以連接配接SQL SERVER

--sp_denylogin 'nwtraders/sqladmin3' 阻止域使用者nwtraders/sqladmin3連

   接SQL SERVER 也就是表是,不能用nwtraders/sqladmin1這個賬戶登入SQL SERVER,

   也不能連接配接SQL SERVER

--sp_defaultdb 'nwtraders/sqladmin4','jacobean'

   改變nwtraders/sqladmin4登入時的預設資料庫為jacobean

--sp_defaultlanguage 'nwtraders/sqladmin5','slovak'改變nwtraders/sqladmin5登

  錄時的預設語言為slovak

--sp_addlogin 'jacobean','123465','jacobean','simplified chinese'

    建立jacobean為新的SQL登入,密碼為123456,預設資料庫為jacobean,默

    認語言為simplified chinese

--sp_droplogin 'jacobean'删除jacobean這個SQL登入

--sp_password '123456','321123','jacobean' 更改jacobean這個SQL登入的密碼,123456為舊密碼,321123為新的密碼

--grant create table to jacobean, jacky, [nwtraders/sqladmin6] 将create table語句權限授

   予SQL登入使用者jacobean,使用者自定義的角色jacky,WINDOWS 組或使用者nwtraders/sqladmin6

--deny create table to jacobean 拒絕jacobean使用者使用create table語句權限

--revoke all from jacobean 廢除所有jacobean使用者的已授予和已拒絕權限

--sp_helprotect null, null, null, 's' 列出目前資料庫所有的語句權限

--grant select on name to jacobean,jacky,[nwtraders/sqladmin7] 将name這個

   表的上的SELECT對象權限授予SQL登入使用者jacobean,使用者自定義的角色jacky,WINDOWS 組

   或使用者nwtraders/sqladmin7

--deny insert, update, delete to jacobean 拒絕jacobean這個賬戶的insert, update, delete權限

--grant select on name to jacobean with grant option 将name這個表上的SELECT對象權限授予用

   戶自定義的資料庫角色jacobean,并且,jacobean角色上的所有成員都有權限将name這個表上的SELECT

   對象權限授予其它使用者,角色或組

--grant select on name to jacobean as [nwtraders/sqladmin6] 将name表上的對象權限

授予jacobean這個使用者,而nwtraders/sqladmin6這個組使用者通過使用AS來引用他的成員身份,

進而證明授權行是有效的

--revoke grant option for on name from jacobean as [nwtraders/sqladmin6] 廢除

了jacobean的WITH GRANT OPTION權限,但表name的WITH GRANT OPTION權限沒有被廢除

--exec sp_helprotect 'name' 列出目前數庫據中name這個表的所有的對象權限

--exec sp_helprotect null, 'jacobean' 列出jacobean在目前資料庫中所有的語句權限和對象權限

--exec sp_helprotect null , null , 'nwtraders/sqladmin7' 列出目前資料庫中的

   組成員nwtraders/sqladmin7授予的所有對象權限

--sp_changeobjectowner name,jacobean 改變name這個表的所有者為jacobean使用者

--sp_addapprole 'jacky_01','123456' 建立應用程式角色,jacky_01為應用程式角色名,123456為密碼

--sp_addlinkedserver 'jacky/jacky' 連結名稱為JACYK的SQL伺服器上的名稱為JACKY的執行個體

--exec sp_addmessage 50099 , 16, 'customer%d was deleted by%s', 'us_english','true' 建立使用者自定義錯誤消息50099,當發生該錯誤的時候,記入WINDOWS應用程式日志

--{create procedure removecustomer @customerid varchar(5) = null

--as

--declare @username varchar(60)

--set @username = suser_name() 請注意書本上的這段代碼是錯誤的,我已經改過來了

--begin transaction

--delete customers

--where customerid = @customerid

--raiserror (50099, 16, 1, @customerid, @username) 該段SQL語句的作用是,建立在customers表上删除客戶的存儲過程,而這個存儲過程在執行期間,

--commit transaction} 會觸發50099這個錯誤号,之後再用raiserror語句,其作用是用适合的值替換剛才删除的客戶号和執行該存儲過程的使用者名.

--{error: 50099, severity: 16, state 1 由于郵件伺服器無搞到,是以呢段代碼無法驗證而呢段代碼既作用系,當使用者執行remove customer存儲過程時,

--remove customer 732 was deleted by nwtraders/administrator} 将觸法50099錯誤号,并在WINDOWS日志中記錄,并将錯誤資訊發給賬戶管理者.

--注釋:jacobean->資料庫名稱,C:/BACKUP/jacobean_disk.bak->檔案路徑和檔案名

--alter database jacobean set recovery full 将資料庫jacobean的恢複模型設定為full即為,完全

--alter database jacobean set recovery simple 将資料庫jacobean的恢複模型設定為simple即為,簡單

--alter database jacobean set recovery bulk_logged 将資料庫jacobean的恢複模型設定為bulk_logged即為,大容量

--exec sp_addumpdevice 'disk', 'jacobean_disk', 'C:/BACKUP/jacobean_disk.bak' 建立硬碟永久備份裝置jacobean_disk,檔案名為

jacobean_disk.bak

--exec sp_addumpdevice 'tape', 'jacobean_tape', 'C:/BACKUP/jacobean_tape.bak' 建立錄音帶永久備份裝置jacobean_tape,檔案名為

jacobean_tape.bak

--exec sp_addumpdevice 'pipe','jacobean_pipe', 'C:/BACKUP/jacobean_pipe.bak' 建立錄音帶永久備份裝置jacobean_pipe,檔案名為

jacobean_pipe.bak

--backup database jacobean to disk = 'C:/BACKUP/jacobean_disk_temp.bak' 将jacobean臨時備份到jacobean_disk_temp.bak檔案上

--{backup database jacobean to jacobean01, jacobean02, jacobean03

--with  這段SQL語句是将jacobean資料庫備份到jacobean01, jacobean02, jacobean03,這三個備份設定上,但最後一句medianame =

jacobean,是出錯的,

--medianame = jacobean} 而medianame是建立備份集稱的作用,但不知為什麼建立不了

--backup database jacobean to disk = 'C:/BACKUP/jacobean_disk.bak' with noinit 将jacobean備份檔案追加到jacobean_disk.bak檔案

--backup database jacobean to disk = 'C:/BACKUP/jacobean_disk.bak' with format, init 将jacobean備份檔案重寫到

jacobean_disk.bak上

--{exec sp_addumpdevice 'disk', 'jacobean_01', 'C:/BACKUP/jacobean_01.bak'

--backup database jacobean to jacobean_01} 這段SQL語句的作用是,建立備份裝置jacobean_01,再将jacobean完全備份到jacobean_01上

--backup database jacobean to jacobean_01 with init 将jacobean完全資料庫備份的備份檔案重寫到jacobean_01裝置上

--backup database jacobean to jacobean_01 with noinit 将jacobean完全資料庫備份的備份檔案追加到jacobean_01裝置上

--backup database jacobean to disk = 'C:/BACKUP/jacobean_temp.bak' 在硬碟上建立備份檔案jacobean_temp.bak,并将jacobean資料庫完全備份到該檔案上

--backup database jacobean to disk = 'C:/BACKUP/jacobean_01.bak' with differential 在硬碟上建立臨時備份檔案jacobean_01.bak,并将jacobean資料庫差異備份到該檔案上

--{exec sp_addumpdevice 'disk', 'jacobean_log', 'C:/BACKUP/jacobean_log.bak'

--backup log jacobean to jacobean_log} 這段SQL語句的作用是,建立日志備份裝置jacobean_log,再将jacobean資料庫的事務日志備份到該裝置上

--backup log jacobean with truncate_only 删除jacobean資料庫日志中,不活動的部份

--backup log jacobean with no_log 删除jacobean資料庫日志中,不活動的部份

--file = jacobeantemp_data_02 to jacobeantemp_02 這段SQL語句語句的作用是,将jacobeantemp資料庫檔案組中,名稱為jacobeantemp_data_02的檔案,備份到裝置jacobeantemp_02裝置上,

--backup log jacobeantemp to jacobeantemp_log}

--{use master

--restore database jacobean

--from jacobean_disk}從裝置jacobean_disk還原資料庫jacobean

--{use master

--restore database jacobean

--from jacobean_01, jacobean_02, jacobean_03}從三個裝置jacobean_01, jacobean_02, jacobean_03,還原資料庫jacobean

--{use master

--restore database jacobean

--from jacobean_disk

--with file = 2, recovery} 從裝置jacobean_disk的第二個檔案還原資料庫jacobean,并将資料庫傳回到一緻性

--{use master

--restore database jacobean

--from jacobean_disk

--with recovery} 從裝置jacobean_disk還原資料庫jacobean,并将資料庫傳回到一緻性

--{use master

--restore database jacobean

--from jacobean_norecovery

--with file = 1, norecovery 首先從裝置jacobean_norecovery的第一個檔案還原資料庫jacobean,但不将資料庫傳回一緻性,

--use master

--restore database jacobean

--from jacobean_norecovery

--with file = 2, recovery} 然後再從裝置jacobean_norecovery的第二個檔案還原資料庫jacobean,并将資料庫傳回到一緻性.

--{use master

--restore database jacobean

--from jacobean_data

--with norecovery 首先從裝置jacobean_data中還原資料庫jacobean,但不将資料庫傳回一緻性

--restore log jacobean

--from jacobean_log

--with file = 1,

--stats,

--norecovery  然後再從裝置jacobean_log的第一個事務日志檔案還原事務日志到資料庫jacobean,但也不将資料庫傳回一緻性

--restore log jacobean

--from jacobean_log

--with file = 2,

--recovery} 最後從裝置jacobean_log的第二個事務日志檔案還原事務日志到資料庫jacobean,并将資料庫傳回到一緻性,整個資料庫還原過程結束

--{use master

--restore database jacobean

--from jacobean_data_time

--with norecovery 首先從裝置jacobean_data_time中還原資料庫jacobean,但不将資料庫傳回一緻性,

--restore log jacobean

--from jacobean_log_time

--with file = 1,

--norecovery 然後再從裝置jacobean_log_time的第一個事務日志檔案還原事務日志到資料庫jacobean,但也不将資料庫傳回一緻性

--restore database jacobean

--from jacobean_log_time

--with file = 2,

--recovery,  最後從裝置jacobean_log_time的第二個事務日志檔案應用發生在'June 2, 2005 8:30 pm'之前的更改,

--stopat = 'June 2, 2005 7:30 am'} 還原事務日志到資料庫jacobean,并将資料庫傳回到一緻性,整個資料庫還原過程結束

--{use master

--restore database jacky 注意:資料庫jacky是由三個檔案組成的

--file = 'jacky2'

--from jacky_datas

--with norecovery 首先從裝置jacky_datas還原檔案組備份檔案jacky2到資料庫jacky,但不将資料庫傳回一緻性,

--restore log jacky

--from jacky

--with file = 1, recovery} 再從事務日志備份裝置jacky中的1個備份檔案還原到資料庫jacky,并将資料庫傳回到一緻性

--{use jacobean

--exec sp_detach_db @dbname = 'pubs' 首先分離資料庫pubs,注意:書本上是沒有這一句語句的,是以按書本上打會出錯!

--exec sp_attach_single_file_db @dbname = 'pubs',  再将資料庫pubs付加到jacobean資料庫.

[email protected] = 'C:/Program Files/Microsoft SQL Server/MSSQL$JACOBEAN/Data/pubs.mdf'}

--exec sp_who 顯示目前資料庫的使用者和程序

--exec sp_lock 顯示活動鎖,阻塞鎖,死鎖資訊

--exec sp_spaceused 查詢表或資料所使用的磁盤空間大小

--exec sp_helpdb 查詢資料庫及其對象

--exec sp_monitor 統計SQL Server的資訊

--sp_helpindex sysconfigures 索引sysconfigures表

--sp_statistics sysconfigures 特定索引sysconfigures表

--select getdate() as 'Today s Date and Time', @@connections  as 'Login Attempts' 記錄SQL Server最近一次啟動時間和試圖登入的次數

--select @@error as 'error' 記錄上次執行SQL語句的錯誤号

--select @@spid as 'spid' 記錄目前使用者程序的伺服器程序ID,使用這個ID來識别在SP_WHO輸出中的目前使用者程序

--select @@procid as 'procid' 記錄目前存儲過程的ID

--set statistics io on 顯示執行SQL語句進産生的磁盤活動總量資訊

--set statistics io off 不顯示執行SQL語句進産生的磁盤活動總量資訊

--set statistics time on 顯示分析,編譯和執行SQL語句所需的時間

--set statistics time off 不顯示分析,編譯和執行SQL語句所需的時間

--set statistics profile on 在每次執行SQL查詢之後顯示一個代表該查詢執行特征的結果集

--set statistics profile off 在每次執行SQL查詢之後不顯示一個代表該查詢執行特征的結果集

--set showplan_text on 執行SQL查詢

--set showplan_text off 不執行SQL查詢,隻傳回關于SQL語句執行的詳細資訊

--dbcc sqlperf (LOGSPACE) 顯示目前安裝的所有資料庫的(資料庫名稱,日志可用實際空間大小,事務日志資訊目前占用日志檔案的百分比,日志檔案狀态)

--dbcc opentran ('jacobean') with tableresults,no_infomsgs 獲得jacobean資料庫的事務資訊,并以報表形式指定結果以便可以裝載到表中,而且禁止顯示所有資訊性消息!

--dbcc show_statistics (name,姓名) 顯示name表上以"姓名"為索引的統計資訊.

--dbcc checkdb ('jacobean') 顯示jacobean資料庫中所有對像的配置設定及結構完整性

--dbcc checkdb ('jacobean',noindex) 顯示jacobean資料庫中對像的配置設定及結構完整性,并指定不檢查非系統表的非聚集索引

--dbcc checkdb ('jacobean',noindex) with no_infomsgs 顯示jacobean資料庫中對像的配置設定及結構完整性,并指定不檢查非系統表的非聚集索引,而且禁止顯示所有資訊性消息!

--dbcc checkfilegroup ('frimary') 顯示資料庫檔案組中所有表的配置設定及結構完整性,注意:frimary為檔案組名,但經測試,該語句運作不成功!

--dbcc checktable ('name') 顯示表name的資料,索引,文本,非文本和圖像頁的完整性

--建立一個名為postalcode的資料類型,它包含了10個位元組符資料,并且可以為MULL

USE ClassNorthwind

IF EXISTS (SELECT domain_name FROM information_schema.domains

           WHERE domain_schema = 'dbo' AND domain_name = 'postalcode')

    EXEC  sp_droptype  postalcode

GO

EXEC  sp_addtype  postalcode, 'nvarchar(10)' , NULL

GO

--驗證已經建立的資料類型

USE ClassNorthwind

SELECT domain_name

   FROM information_schema.domains

   ORDER BY domain_name

GO

--建立使用者定義資料類型:City  Region  Country

--最多15個位元組的字元資料,可以為MULL

USE ClassNorthwind

IF EXISTS (SELECT domain_name FROM information_schema.domains

           WHERE domain_schema = 'dbo' AND domain_name = 'city')

    EXEC  sp_droptype  city

IF EXISTS (SELECT domain_name FROM information_schema.domains

           WHERE domain_schema = 'dbo' AND domain_name = 'region')

    EXEC  sp_droptype  region

IF EXISTS (SELECT domain_name FROM information_schema.domains

           WHERE domain_schema = 'dbo' AND domain_name = 'country')

    EXEC  sp_droptype  country

GO

EXEC  sp_addtype  city, 'nvarchar(15)', NULL

EXEC  sp_addtype  region, 'nvarchar(15)', NULL

EXEC  sp_addtype  country, 'nvarchar(15)', NULL

GO

--檢視資料庫中的使用者定義資料類型

SELECT domain_name

   FROM information_schema.domains

   ORDER BY domain_name

GO

--在ClassNorthwind資料庫中建立Employees表

USE ClassNorthwind

IF OBJECT_ID('dbo.Employees') IS NOT NULL

    DROP TABLE dbo.Employees

GO

CREATE TABLE dbo.Employees (

    EmployeeID int IDENTITY (1, 1) NOT NULL ,

    LastName nvarchar (20) NOT NULL ,

    FirstName nvarchar (10) NOT NULL ,

    Title nvarchar (30) NULL ,

    TitleOfCourtesy nvarchar (25) NULL ,

    BirthDate datetime NULL ,

    HireDate datetime NULL ,

    Address nvarchar (60) NULL ,

    City city ,

    Region region ,

    PostalCode postalcode ,

    Country country ,

    HomePhone nvarchar (24) NULL ,

    Extension nvarchar (4) NULL ,

    Photo image NULL ,

    Notes ntext NULL ,

    ReportsTo int NULL ,

    PhotoPath nvarchar (255) NULL

) ON [PRIMARY]

GO

--檢視是否建立了該表

SELECT table_name

  FROM information_schema.tables

  WHERE table_name = 'Employees'

GO

--删除Employees表

USE ClassNorthwind

GO

If OBJECT_ID('dbo.Employees') IS NOT NULL

    DROP TABLE dbo.Employees

GO

--檢視是否有下清單名

SELECT table_name

  FROM information_schema.tables

  WHERE table_name IN (  'Employees'             --表名

                       , 'Categories'            --表名

                       , 'Customers'             --表名

                      )

GO

--在ClassNorthwind資料庫Employees表中添加Age列

USE ClassNorthwind

ALTER TABLE Employees

  ADD Age tinyint NULL

go

--在ClassNorthwind資料庫Employees表中添加Age列

USE ClassNorthwind

ALTER TABLE Employees

  DROP COLUMN age

go

--檢視Employees表的存儲過程

exec sp_help Employees

GO

--在Employees表中添加Age列資料類型為tinyint,可以為空

ALTER TABLE Employees

  ADD Age tinyint NULL

go

--删除Employees表中Age列

USE ClassNorthwind

ALTER TABLE Employees

  DROP COLUMN age

go