Is your database Case Sensitive? Find its collation, then look it up in fn_helpcollations() and read the description. A quick answer from my Office Hours.
Temporal Tables: Keeping History Without a Trigger
Use temporal tables to retain earlier row versions, query a past state, and plan history storage without confusing version history with user auditing.
Growing varchar Updates: How Longer Values Split Pages
A varchar column costs almost nothing while it is empty and a lot once people fill it in. Here is the page count before and after, and what a rebuild recovers.
How to Read a SQL Server Execution Plan
An execution plan is SQL Server showing its working. Read it inside out, learn the six operators you actually meet, ignore the cost percentages, and compare estimated rows with actual rows instead.
FULL JOIN: Preserve Unmatched Rows on Both Sides
FULL JOIN preserves both source sides. Keep identifiers visible while reviewing ordinary equality, unmatched rows and later filters.
Reading the Transaction Log With fn_dblog
fn_dblog can expose transaction-log records during a narrow investigation, but retention and missing user context make it a last resort.
Stop Chasing Every Seek: When a Table Scan Is the Right Plan
A Clustered Index Scan is not always the problem. Count the reads for a seek with lookups, a scan and the optimizer’s own pick, then see when the seek really wins.







