I followed the migration of a row through SQL Server 2025, from the first write to the grave. The log gets there before the table. The delete does not erase anything. And when the table is empty and the ghost is gone, the statistics histogram still names the row in full.
UPDATE Without WHERE Clause: The Day Everyone Got a Raise
An UPDATE without WHERE clause changed 8,432 salaries. When ROLLBACK can help, and how to check the affected row count before COMMIT.
SQL Server Deadlock: Build One With Your Own Hands
A SQL Server deadlock occurs when sessions form a cycle of dependencies and none can continue. This example lets you create the cycle, inspect it, and remove it.
BULK INSERT Batch Size and ROWS_PER_BATCH
Distinguish ROWS_PER_BATCH estimates from BULK INSERT commit batches, then review logging, locks, rejected rows, and atomic loading.
Logging Agent Jobs That Call Stored Procedures
Improve logging Agent jobs with procedure run records, start and end events, captured errors, step output, and history correlation.
Cleaning Currency Strings Into decimal Values
Convert currency strings into decimal amounts using known symbols, explicit parsing cultures, conversion checks, and rejection evidence.
EXISTS vs IN vs JOIN: Writing Semi-Joins
Compare EXISTS, IN, and JOIN for semi-joins, prevent duplicate customer rows, and handle NULL safely in exclusion queries.






