SQL?Server數(shù)據(jù)庫命令整理大全
SQL Server 中包含了大量的命令用于數(shù)據(jù)庫的管理、查詢和操作。以下是一些主要命令分類及其簡要示例:
1. 數(shù)據(jù)庫管理
- 創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE MyDatabase;
- 刪除數(shù)據(jù)庫
DROP DATABASE MyDatabase;
- 選擇/切換當(dāng)前數(shù)據(jù)庫
USE MyDatabase;
2. 表操作
- 創(chuàng)建表
CREATE TABLE Employees ( EmployeeID int PRIMARY KEY, FirstName nvarchar(50), LastName nvarchar(50), HireDate datetime );
- 插入數(shù)據(jù)
INSERT INTO Employees (EmployeeID, FirstName, LastName, HireDate) VALUES (1, 'John', 'Doe', '2023-01-01');
- 更新數(shù)據(jù)
UPDATE Employees SET FirstName = 'Jane' WHERE EmployeeID = 1;
- 刪除數(shù)據(jù)
DELETE FROM Employees WHERE EmployeeID = 1;
- 修改表結(jié)構(gòu)
ALTER TABLE Employees ADD DepartmentID int FOREIGN KEY REFERENCES Departments(DepartmentID);
3. 查詢數(shù)據(jù)
- 基本查詢
SELECT * FROM Employees;
- 條件查詢
SELECT * FROM Employees WHERE DepartmentID = 2;
- 排序查詢
SELECT * FROM Employees ORDER BY HireDate DESC;
- 聚合函數(shù)查詢
SELECT COUNT(*) FROM Employees;
- 分組查詢
SELECT DepartmentID, COUNT(*) AS CountOfEmployees FROM Employees GROUP BY DepartmentID;
4. 連接查詢
- 內(nèi)連接
SELECT E.FirstName, D.DepartmentName FROM Employees E INNER JOIN Departments D ON E.DepartmentID = D.DepartmentID;
5. 存儲(chǔ)過程與函數(shù)
- 創(chuàng)建存儲(chǔ)過程
CREATE PROCEDURE GetEmployeesByDepartment @deptId INT AS BEGIN SELECT * FROM Employees WHERE DepartmentID = @deptId; END
- 調(diào)用存儲(chǔ)過程
EXEC GetEmployeesByDepartment 2;
- 創(chuàng)建用戶定義函數(shù)
CREATE FUNCTION dbo.GetTotalEmployees(@deptId INT) RETURNS INT AS BEGIN RETURN (SELECT COUNT(*) FROM Employees WHERE DepartmentID = @deptId); END
- 使用函數(shù)
SELECT dbo.GetTotalEmployees(2) AS TotalEmpInDept2;
6. 視圖
- 創(chuàng)建視圖
CREATE VIEW EmployeeNames AS SELECT FirstName, LastName FROM Employees;
- 查詢視圖
SELECT * FROM EmployeeNames;
7. 索引
- 創(chuàng)建索引
CREATE INDEX IX_Employees_DepartmentID ON Employees (DepartmentID);
- 刪除索引
DROP INDEX IX_Employees_DepartmentID ON Employees;
8. 其他常用命令
- 事務(wù)控制
BEGIN TRANSACTION; -- 執(zhí)行一系列操作... COMMIT TRANSACTION;
- 備份還原
BACKUP DATABASE MyDatabase TO DISK = 'C:\backup\MyDatabase.bak'; RESTORE DATABASE MyDatabase FROM DISK = 'C:\backup\MyDatabase.bak';
9. 用戶與權(quán)限管理
- 創(chuàng)建登錄賬戶
CREATE LOGIN NewUser WITH PASSWORD = 'StrongPassword!';
- 創(chuàng)建數(shù)據(jù)庫用戶并映射到登錄名
CREATE USER UserForDB FOR LOGIN NewUser; ALTER ROLE db_datareader ADD MEMBER UserForDB; -- 給予讀權(quán)限 ALTER ROLE db_datawriter ADD MEMBER UserForDB; -- 給予寫權(quán)限
- 撤銷用戶對(duì)數(shù)據(jù)庫的訪問
DROP USER UserForDB;
- 授予、拒絕或撤銷權(quán)限
GRANT SELECT ON Employees TO UserForDB; DENY UPDATE ON Employees TO UserForDB; REVOKE DELETE ON Employees FROM UserForDB;
10. 數(shù)據(jù)備份與恢復(fù)
- 完整數(shù)據(jù)庫備份
BACKUP DATABASE MyDatabase TO DISK = 'C:\Backup\MyDatabase.bak' WITH FORMAT, MEDIANAME = 'MyDatabase_Full', NAME = 'Full Backup';
- 差異備份
BACKUP DATABASE MyDatabase TO DISK = 'C:\Backup\MyDatabase_diff.bak' WITH DIFFERENTIAL, FORMAT, MEDIANAME = 'MyDatabase_Diff', NAME = 'Differential Backup';
- 事務(wù)日志備份
BACKUP LOG MyDatabase TO DISK = 'C:\Backup\MyDatabase_log.trn' WITH NOFORMAT, NOINIT, NAME = N'MyDatabase_LogBackup', SKIP, NOREWIND, NOUNLOAD, STATS = 10;
- 還原數(shù)據(jù)庫
RESTORE DATABASE MyDatabase FROM DISK = 'C:\Backup\MyDatabase.bak' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 5;
11. 系統(tǒng)函數(shù)與信息查詢
- 查詢當(dāng)前數(shù)據(jù)庫版本
SELECT @@VERSION;
- 查詢表結(jié)構(gòu)信息
sp_help 'Employees';
- 獲取當(dāng)前時(shí)間
SELECT GETDATE() AS CurrentDateTime;
12. 其他高級(jí)特性
- 窗口函數(shù)
SELECT EmployeeID, FirstName, Salary, AVG(Salary) OVER (PARTITION BY DepartmentID) AS AvgSalaryInDept FROM Employees;
- CTE(公用表表達(dá)式)
WITH EmpSalaries AS ( SELECT EmployeeID, Salary FROM Employees ) SELECT * FROM EmpSalaries WHERE Salary > (SELECT AVG(Salary) FROM EmpSalaries);
13. 分區(qū)表
- 創(chuàng)建分區(qū)函數(shù)
CREATE PARTITION FUNCTION pf_EmployeesRange (int) AS RANGE RIGHT FOR VALUES (2000, 2005, 2010, 2015);
- 創(chuàng)建分區(qū)方案
CREATE PARTITION SCHEME ps_Employees AS PARTITION pf_EmployeesRange TO ( [PrimaryFileGroup], [SecondaryFileGroup1], [SecondaryFileGroup2], [SecondaryFileGroup3] );
- 創(chuàng)建分區(qū)表
CREATE TABLE PartitionedEmployees ( EmployeeID int PRIMARY KEY, HireDate int NOT NULL ) ON ps_Employees(HireDate);
14. 高級(jí)查詢操作
- 聯(lián)合查詢(UNION、UNION ALL)
SELECT FirstName, LastName FROM Employees WHERE DepartmentID = 1 UNION ALL SELECT FirstName, LastName FROM Employees WHERE DepartmentID = 2;
- INTERSECT和EXCEPT操作
SELECT EmployeeID FROM Employees WHERE DepartmentID = 1 INTERSECT SELECT EmployeeID FROM Employees WHERE DepartmentID = 2; SELECT EmployeeID FROM Employees WHERE DepartmentID = 1 EXCEPT SELECT EmployeeID FROM Employees WHERE DepartmentID = 2;
15. 復(fù)制與同步
- 使用SQL Server Replication進(jìn)行數(shù)據(jù)復(fù)制這涉及到一系列復(fù)雜的配置步驟,包括發(fā)布設(shè)置、訂閱設(shè)置、代理設(shè)置等。
16. 異步處理與作業(yè)調(diào)度
- 創(chuàng)建SQL Server Agent作業(yè)
USE msdb; GO EXEC sp_add_job @job_name=N'MyBackupJob', @enabled=1, @description='Daily backup job'; GO -- 添加作業(yè)步驟 EXEC sp_add_jobstep @job_name=N'MyBackupJob', @step_name=N'Backup Database', @subsystem=N'TSQL', @command=N'BACKUP DATABASE MyDatabase TO DISK = ''C:\Backup\MyDatabase.bak'';', @retry_attempts=5, @retry_interval=5; GO -- 啟用作業(yè)調(diào)度 EXEC dbo.sp_add_schedule @schedule_name = N'DailyAtMidnight', @freq_type = 4, -- 每日 @freq_interval = 1, -- 每天運(yùn)行一次 @active_start_time = 000000; -- 在午夜開始 -- 將作業(yè)與調(diào)度關(guān)聯(lián) EXEC sp_attach_schedule @job_name = N'MyBackupJob', @schedule_name = N'DailyAtMidnight'; GO
17. 查詢執(zhí)行計(jì)劃
- 查看查詢執(zhí)行計(jì)劃
-- 在查詢語句前添加EXPLAIN 或者 SET SHOWPLAN_ALL ON SET SHOWPLAN_ALL ON; SELECT * FROM Employees WHERE DepartmentID = 1; SET SHOWPLAN_ALL OFF; -- 或使用圖形化方式查看 -- 在SQL Server Management Studio中,運(yùn)行查詢后右鍵選擇"包括實(shí)際執(zhí)行計(jì)劃" SELECT * FROM Employees WHERE DepartmentID = 1;
18. 引用外部數(shù)據(jù)
- OPENROWSET函數(shù)讀取文件
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Text;Database=C:\Data;HDR=YES;FMT=Delimited', 'SELECT * FROM [Employees.txt]');
- 鏈接服務(wù)器
-- 創(chuàng)建鏈接服務(wù)器 EXEC sp_addlinkedserver @server = N'MyLinkedServer', @srvproduct=N'OtherDB', @provider=N'SQLNCLI', @datasrc=N'ServerName\InstanceName'; -- 使用鏈接服務(wù)器查詢數(shù)據(jù) SELECT * FROM MyLinkedServer.RemoteDB.dbo.Employees;
19. 動(dòng)態(tài)SQL
- 構(gòu)建并執(zhí)行動(dòng)態(tài)SQL語句
DECLARE @DepartmentID INT = 1; DECLARE @SQL NVARCHAR(MAX) = N'SELECT * FROM Employees WHERE DepartmentID = ' + CAST(@DepartmentID AS NVARCHAR(10)); EXEC sp_executesql @SQL;
20. 自增序列與標(biāo)識(shí)符
- 創(chuàng)建帶有自增列的表
CREATE TABLE Orders ( OrderID INT IDENTITY(1,1), CustomerID INT, OrderDate DATE, PRIMARY KEY (OrderID) );
21. 數(shù)據(jù)類型轉(zhuǎn)換
- 顯式轉(zhuǎn)換
SELECT CAST('1234' AS INT), CONVERT(INT, '1234');
22. CASE表達(dá)式和IIF函數(shù)
- CASE表達(dá)式
SELECT EmployeeID, FirstName, LastName, CASE WHEN Salary > 50000 THEN 'High' WHEN Salary > 30000 THEN 'Medium' ELSE 'Low' END AS SalaryLevel FROM Employees;
- IIF函數(shù)(SQL Server 2012及以上版本)
SELECT EmployeeID, FirstName, LastName, IIF(Salary > 50000, 'High', IIF(Salary > 30000, 'Medium', 'Low')) AS SalaryLevel FROM Employees;
23. 數(shù)據(jù)庫快照
- 創(chuàng)建數(shù)據(jù)庫快照
CREATE DATABASE MyDatabase_snapshot ON (NAME = MyDatabase, FILENAME = 'C:\Snapshots\MyDatabase_snapshot.ss') AS SNAPSHOT OF MyDatabase;
- 從快照恢復(fù)數(shù)據(jù)
RESTORE DATABASE MyDatabase FROM DATABASE_SNAPSHOT = 'MyDatabase_snapshot';
總結(jié)
到此這篇關(guān)于SQL Server數(shù)據(jù)庫命令整理大全的文章就介紹到這了,更多相關(guān)SQL Server命令大全內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SQL Server阻止保存修改表結(jié)構(gòu)的解決方法
修改DeUser表中列的數(shù)據(jù)類型從varchar修改為int時(shí),進(jìn)行保存時(shí)彈出的提示框,阻止保存修改表結(jié)構(gòu),怎么辦?這篇文章就為大家詳細(xì)介紹了解決SQL Server阻止保存修改表結(jié)構(gòu)問題的方法,感興趣的小伙伴們可以參考一下2016-05-05SQLSERVER記錄登錄用戶的登錄時(shí)間(自寫腳本)
下面是本人寫的一個(gè)腳本,我的實(shí)現(xiàn)原理是使用觸發(fā)器,觸發(fā)器是登錄觸發(fā)器,范圍是整個(gè)服務(wù)器范圍,如果有人登錄過,就使用 bcp命令把登錄信息記錄日志文件,感興趣的朋友可以了解下,或許本文的知識(shí)點(diǎn)對(duì)你有所幫助2013-02-02SQL Server存儲(chǔ)過程同時(shí)返回分頁結(jié)果集和總數(shù)
這篇文章主要為大家詳細(xì)介紹了SQL Server存儲(chǔ)過程同時(shí)返回分頁結(jié)果集和總數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01delete from 表名與truncate table 表名區(qū)別
delete from 表名與truncate table 表名區(qū)別,選擇適合我們的刪除數(shù)據(jù)庫數(shù)據(jù)的方法2012-10-10SQL JOIN 連接詳細(xì)介紹及簡單使用實(shí)例
這篇文章主要介紹了SQL JOIN 連接詳細(xì)介紹及簡單使用實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-01-01SQL Server數(shù)據(jù)庫設(shè)置自動(dòng)備份策略的完整步驟
這篇文章主要給大家介紹了關(guān)于SQL Server數(shù)據(jù)庫設(shè)置自動(dòng)備份策略的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用sql server具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09使用FORFILES命令來刪除SQLServer備份的批處理
利用這些參數(shù)可以構(gòu)造下面的例子來解決你刪除備份腳本文件的難題。你可以基于更改時(shí)間/日期或者備份類型來創(chuàng)建腳本。你甚至可以構(gòu)造能夠同時(shí)參照兩種標(biāo)準(zhǔn)的腳本2012-05-05SQL Server誤區(qū)30日談 第29天 有關(guān)堆碎片的誤區(qū)
對(duì)堆建聚集索引再DROP在我看來是除了收縮數(shù)據(jù)庫之外最2的事了2013-01-01