Microsoft SQL Server
Updated: September 10, 2025Categories: Query, Backend
Printed from:
Microsoft SQL Server Cheatsheet
1. Connection and Basic Commands
Connecting to SQL Server
SQL
123456789-- Connect using SQL Server Management Studio (SSMS)
-- Server name: [ServerName]\[InstanceName]
-- Connect using sqlcmd utility
sqlcmd -S ServerName -U Username -P Password
-- Connection string example
Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;
Basic Commands
SQL
123456789101112-- Show all databases
SELECT name FROM sys.databases;
-- Show current database
SELECT DB_NAME() AS CurrentDatabase;
-- Show current user
SELECT SUSER_SNAME() AS CurrentUser;
-- Check SQL Server version
SELECT @@VERSION AS SQLServerVersion;
2. Database Operations
Create, Use, and Drop Databases
SQL
1234567891011121314151617181920212223242526272829-- Create a new database
CREATE DATABASE MyDatabase
ON PRIMARY
(
NAME = 'MyDatabase_Primary',
FILENAME = 'C:\SQLData\MyDatabase.mdf',
SIZE = 100MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 10%
)
LOG ON
(
NAME = 'MyDatabase_Log',
FILENAME = 'C:\SQLData\MyDatabase_Log.ldf',
SIZE = 50MB,
MAXSIZE = 2GB,
FILEGROWTH = 10%
);
-- Use a specific database
USE MyDatabase;
-- Drop a database
DROP DATABASE MyDatabase;
-- Create database with specific collation
CREATE DATABASE MyDatabase
COLLATE SQL_Latin1_General_CP1_CI_AS;
3. Table Operations
Create Table
SQL
1234567891011121314151617181920-- Basic table creation
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY IDENTITY(1,1),
FirstName NVARCHAR(50) NOT NULL,
LastName NVARCHAR(50) NOT NULL,
Email NVARCHAR(100) UNIQUE,
Salary DECIMAL(10,2),
HireDate DATE DEFAULT GETDATE(),
DepartmentID INT
);
-- Create table with foreign key
CREATE TABLE Departments (
DepartmentID INT PRIMARY KEY,
DepartmentName NVARCHAR(50),
CONSTRAINT FK_Employee_Department
FOREIGN KEY (DepartmentID)
REFERENCES Departments(DepartmentID)
);
Alter Table
SQL
1234567891011121314151617-- Add a column
ALTER TABLE Employees
ADD PhoneNumber NVARCHAR(20);
-- Modify column
ALTER TABLE Employees
ALTER COLUMN Email NVARCHAR(150);
-- Drop column
ALTER TABLE Employees
DROP COLUMN PhoneNumber;
-- Add constraint
ALTER TABLE Employees
ADD CONSTRAINT CHK_Salary
CHECK (Salary > 0);
Drop Table
SQL
123456-- Drop a table
DROP TABLE Employees;
-- Truncate (remove all data, keep structure)
TRUNCATE TABLE Employees;
4. SQL Server Data Types
Common Data Types
INT: Whole numbersBIGINT: Large whole numbersDECIMAL(p,s): Precise numeric values (p: precision, s: scale)NVARCHAR(n): Unicode variable-length stringCHAR(n): Fixed-length stringDATE: Date without timeDATETIME2: Date and time with more precisionUNIQUEIDENTIFIER: Globally unique identifierXML: Store XML dataJSON: Store JSON data (SQL Server 2016+)
Defining Precise Numeric
SQL
123-- Decimal with 10 total digits, 2 after decimal point
DECIMAL(10,2) -- e.g., 12345678.90
5. CRUD Operations
INSERT
SQL
12345678910111213-- Basic insert
INSERT INTO Employees
(FirstName, LastName, Email, Salary)
VALUES
('John', 'Doe', 'john.doe@example.com', 75000);
-- Multiple row insert
INSERT INTO Employees
(FirstName, LastName, Email, Salary)
VALUES
('Jane', 'Smith', 'jane@example.com', 80000),
('Bob', 'Johnson', 'bob@example.com', 65000);
SELECT
SQL
1234567891011121314151617-- Basic select
SELECT * FROM Employees;
-- Filtered select
SELECT FirstName, LastName, Salary
FROM Employees
WHERE Salary > 70000;
-- Sorting and limiting
SELECT TOP 5 *
FROM Employees
ORDER BY Salary DESC;
-- Distinct values
SELECT DISTINCT DepartmentID
FROM Employees;
UPDATE
SQL
12345678910-- Update specific rows
UPDATE Employees
SET Salary = Salary * 1.1
WHERE Department = 'Sales';
-- Conditional update
UPDATE Employees
SET Email = CONCAT(FirstName, '.', LastName, '@company.com')
WHERE Email IS NULL;
DELETE
SQL
12345678-- Delete specific rows
DELETE FROM Employees
WHERE EmployeeID = 100;
-- Conditional delete
DELETE FROM Employees
WHERE HireDate < '2020-01-01';
6. Joins and Relationships
Join Types
SQL
1234567891011121314151617181920-- Inner Join
SELECT e.FirstName, d.DepartmentName
FROM Employees e
INNER JOIN Departments d ON e.DepartmentID = d.DepartmentID;
-- Left Join
SELECT e.FirstName, d.DepartmentName
FROM Employees e
LEFT JOIN Departments d ON e.DepartmentID = d.DepartmentID;
-- Right Join
SELECT e.FirstName, d.DepartmentName
FROM Employees e
RIGHT JOIN Departments d ON e.DepartmentID = d.DepartmentID;
-- Full Outer Join
SELECT e.FirstName, d.DepartmentName
FROM Employees e
FULL OUTER JOIN Departments d ON e.DepartmentID = d.DepartmentID;
7. Indexes and Constraints
Creating Indexes
SQL
123456789101112-- Clustered Index (Primary Key)
CREATE CLUSTERED INDEX IX_Employees_ID
ON Employees(EmployeeID);
-- Non-Clustered Index
CREATE NONCLUSTERED INDEX IX_Employees_LastName
ON Employees(LastName);
-- Unique Index
CREATE UNIQUE NONCLUSTERED INDEX IX_Employees_Email
ON Employees(Email);
Constraints
SQL
1234567891011121314-- Primary Key
ALTER TABLE Employees
ADD CONSTRAINT PK_Employees PRIMARY KEY (EmployeeID);
-- Foreign Key
ALTER TABLE Orders
ADD CONSTRAINT FK_Orders_Customers
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID);
-- Check Constraint
ALTER TABLE Employees
ADD CONSTRAINT CHK_SalaryRange
CHECK (Salary BETWEEN 30000 AND 200000);
8. Functions and Operators
String Functions
SQL
12345678910-- Concatenation
SELECT CONCAT(FirstName, ' ', LastName) AS FullName FROM Employees;
-- Substring
SELECT SUBSTRING(Email, 1, CHARINDEX('@', Email) - 1) AS Username
FROM Employees;
-- Trim
SELECT LTRIM(RTRIM(FirstName)) AS CleanName FROM Employees;
Date Functions
SQL
123456789101112131415-- Current Date
SELECT GETDATE() AS CurrentDateTime;
-- Date Parts
SELECT
YEAR(HireDate) AS HireYear,
MONTH(HireDate) AS HireMonth,
DAY(HireDate) AS HireDay
FROM Employees;
-- Date Calculation
SELECT
DATEDIFF(YEAR, HireDate, GETDATE()) AS YearsEmployed
FROM Employees;
Aggregate Functions
SQL
123456789101112131415-- Basic Aggregates
SELECT
COUNT(*) AS TotalEmployees,
AVG(Salary) AS AverageSalary,
MAX(Salary) AS MaxSalary,
MIN(Salary) AS MinSalary
FROM Employees;
-- Grouping
SELECT
DepartmentID,
AVG(Salary) AS AvgDepartmentSalary
FROM Employees
GROUP BY DepartmentID;
9. SQL Server-Specific Features
Common Table Expressions (CTEs)
SQL
123456789101112131415161718192021222324-- Basic CTE
WITH HighSalaryEmployees AS (
SELECT *
FROM Employees
WHERE Salary > 100000
)
SELECT * FROM HighSalaryEmployees;
-- Recursive CTE (Hierarchical Data)
WITH EmployeeHierarchy AS (
-- Base case
SELECT EmployeeID, ManagerID, FirstName, 0 AS Level
FROM Employees
WHERE ManagerID IS NULL
UNION ALL
-- Recursive case
SELECT e.EmployeeID, e.ManagerID, e.FirstName, eh.Level + 1
FROM Employees e
INNER JOIN EmployeeHierarchy eh ON e.ManagerID = eh.EmployeeID
)
SELECT * FROM EmployeeHierarchy;
Window Functions
SQL
123456789101112131415-- Ranking
SELECT
FirstName,
Salary,
RANK() OVER (ORDER BY Salary DESC) AS SalaryRank,
DENSE_RANK() OVER (ORDER BY Salary DESC) AS DenseSalaryRank
FROM Employees;
-- Running Total
SELECT
FirstName,
Salary,
SUM(Salary) OVER (ORDER BY EmployeeID) AS RunningTotal
FROM Employees;
MERGE Statement
SQL
123456789101112-- Upsert Operation
MERGE INTO Customers AS target
USING (SELECT * FROM NewCustomers) AS source
ON (target.CustomerID = source.CustomerID)
WHEN MATCHED THEN
UPDATE SET
Name = source.Name,
Email = source.Email
WHEN NOT MATCHED THEN
INSERT (CustomerID, Name, Email)
VALUES (source.CustomerID, source.Name, source.Email);
OUTPUT Clause
SQL
12345-- Capture inserted/deleted rows
DELETE FROM Employees
OUTPUT deleted.EmployeeID, deleted.FirstName, deleted.LastName
WHERE Salary < 50000;
10. Stored Procedures and Functions
Create Stored Procedure
SQL
123456789101112CREATE PROCEDURE GetEmployeesBySalaryRange
@MinSalary DECIMAL(10,2),
@MaxSalary DECIMAL(10,2)
AS
BEGIN
SELECT * FROM Employees
WHERE Salary BETWEEN @MinSalary AND @MaxSalary
END;
-- Execute procedure
EXEC GetEmployeesBySalaryRange @MinSalary = 50000, @MaxSalary = 100000;
Scalar User-Defined Function
SQL
12345678910111213141516CREATE FUNCTION dbo.CalculateAge
(
@Birthdate DATE
)
RETURNS INT
AS
BEGIN
RETURN DATEDIFF(YEAR, @Birthdate, GETDATE()) -
CASE
WHEN (MONTH(@Birthdate) > MONTH(GETDATE())) OR
(MONTH(@Birthdate) = MONTH(GETDATE()) AND DAY(@Birthdate) > DAY(GETDATE()))
THEN 1
ELSE 0
END
END;
11. Security Features and Permissions
User and Role Management
SQL
123456789101112131415-- Create Login
CREATE LOGIN MyAppUser WITH PASSWORD = 'StrongPassword123!';
-- Create Database User
CREATE USER MyAppUser FOR LOGIN MyAppUser;
-- Grant Permissions
GRANT SELECT, INSERT ON Employees TO MyAppUser;
-- Revoke Permissions
REVOKE INSERT ON Employees FROM MyAppUser;
-- Deny Permissions
DENY DELETE ON Employees TO MyAppUser;
12. Performance Optimization Tips
Indexing Strategies
- Create indexes on columns frequently used in WHERE, JOIN, and ORDER BY
- Avoid over-indexing (each index has overhead)
- Use INCLUDE for covering indexes
- Regularly update statistics
Query Optimization
SQL
123456789-- Use SET STATISTICS IO, TIME ON to analyze query performance
SET STATISTICS IO, TIME ON;
-- Your query here
SET STATISTICS IO, TIME OFF;
-- Avoid functions in WHERE clause that prevent index usage
-- Bad: WHERE YEAR(OrderDate) = 2023
-- Good: WHERE OrderDate >= '2023-01-01' AND OrderDate < '2024-01-01'
13. Common T-SQL Patterns and Best Practices
Error Handling
SQL
12345678910111213141516171819BEGIN TRY
BEGIN TRANSACTION
-- Your database operations
COMMIT TRANSACTION
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION
-- Log error details
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage;
END CATCH
Bulk Insert Best Practices
SQL
12345678910-- Use SQL Server bulk insert for large datasets
BULK INSERT Employees
FROM 'C:\data\employees.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
FIRSTROW = 2
);
Avoid Cursor-Like Operations
SQL
1234567-- Prefer set-based operations over cursors
-- Bad: Cursor-based update
-- Good: Set-based update
UPDATE Employees
SET Salary = Salary * 1.1
WHERE Performance = 'Excellent';
Additional Resources
Note: This cheatsheet provides a comprehensive overview of SQL Server and T-SQL. Always consult the official Microsoft documentation for the most up-to-date and version-specific information.
Continue Learning
Discover more cheatsheets to boost your productivity