Paul White (@sql_kiwi) 's Twitter Profile
Paul White

@sql_kiwi

I write about deep SQL Server engine internals on sql.kiwi and live in Aotearoa New Zealand 🥝

MSFT Data Platform MVP 2011-2022
DBA Stack Exchange Mod

ID: 136093718

linkhttps://sql.kiwi calendar_today23-04-2010 01:02:21

14,14K Tweet

5,5K Takipçi

154 Takip Edilen

Paul White (@sql_kiwi) 's Twitter Profile Photo

Follow-up article showing how to use this technique with updates: Updating in Batches using an API Cursor sql.kiwi/2025/03/batch-…

Paul White (@sql_kiwi) 's Twitter Profile Photo

New article: Sharing Data Between Procedures using a Cursor Contrary to the product documentation, SQL Server cursor variables can be used to share data between stored procedures in the input or output direction (but not both). sql.kiwi/2025/03/sharin…

Paul White (@sql_kiwi) 's Twitter Profile Photo

New article: Avoid optional_spid Plan Cache Issues when Sharing Temp Tables How to avoid unnecessary stored procedure compilation and plan cache pollution when using shared SQL Server temporary tables. sql.kiwi/2025/03/avoid-…

Paul White (@sql_kiwi) 's Twitter Profile Photo

You can't use PRINT or RAISERROR in a SQL Server function to emit debugging data. A workaround: Call sp_set_session_context to save info inside the function. Read the data using SESSION_CONTEXT after the function call.

Paul White (@sql_kiwi) 's Twitter Profile Photo

Since 2008, XACT_STATE includes system transactions, so it works correctly in triggers. But: -- XACT_STATE = 0 PRINT 'XACT_STATE = ' + CONVERT(varchar(11), XACT_STATE()); -- XACT_STATE = 1 PRINT CONCAT('XACT_STATE = ', XACT_STATE()); 😲

Paul White (@sql_kiwi) 's Twitter Profile Photo

New article: Accessing a SQL Server Table Variable in a Different Scope Two ways to access a SQL Server table variable outside its declaration scope. sql.kiwi/2025/04/access…

Paul White (@sql_kiwi) 's Twitter Profile Photo

New article: Recording Debugging Information Inside a SQL Server Function Call We cannot use PRINT or RAISERROR statements within a T-SQL function body for debugging purposes. This article presents a workaround using session context. sql.kiwi/2025/04/debug-…

Paul White (@sql_kiwi) 's Twitter Profile Photo

This is a really funny SQL Server bug dbfiddle.uk/iUmhLPln DECLARE @T table (i smallint NOT NULL PRIMARY KEY); INSERT @T (i) VALUES (256); SELECT TRY_CONVERT(tinyint, T.i) FROM @T AS T; SET STATISTICS XML ON; -- Oops! SELECT T.i FROM @T AS T WHERE TRY_CONVERT(tinyint,

Paul White (@sql_kiwi) 's Twitter Profile Photo

Interesting undocumented USE HINTs in SQL Server 2025 CTP 2: * DISABLE_PERFORMANCE_SORT_FOR_DML sets DMLRequestSort to false like TF 8795 * DISABLE_OPTIONAL_PARAMETER_OPTIMIZATION * PARALLEL_DML_FOR_VECTOR_INDEX_BUILD * DISABLE_SCALABLE_SUBTREE

Paul White (@sql_kiwi) 's Twitter Profile Photo

Looks like 'expression indexes' are coming to SQL Server 2025. This is valid syntax on CTP 2 when trace flag 17152 is enabled: CREATE INDEX ix ON MyTable (n * 2); It creates a computed column for you, named e.g. $expression_index_B18729F8A924473FA0DF2CB95D9B2E01.

Paul White (@sql_kiwi) 's Twitter Profile Photo

I don't really understand why anyone is excited about nested CTEs, but if you want to try it on SQL 2025 CTP2 box, enable TF 15320 (session or global). Currently only documented for 'Fabric' whatever that is docs.microsoft.com/en-us/sql/t-sq…