Splitting a string of unlimited length
There are many techniques for splitting a string in T-SQL (in other words, taking a character-delimited string and producing a table of the values), the best of which are encapsulated in Erland Sommarskog's famous article. My favorite of his string splitting techniques is adapted from a previous example that was created by Anith...
Controlling Stored Procedure Caching with … Dyanmic SQL?!?
Tell me if this situation sends a chill down your spine: You've written a stored procedure, tested it against a variety of inputs, and finally rolled it out in production. All is well... Or so you think. You start getting complaints from some users that it's taking forever to return. But other users are...
You REQUIRE a Numbers table!
Looking at my list of upcoming articles, I keep seeing the same theme repeated over and over. A sequence table of Numbers. Numbers tables are truly invaluable. I use them all of the time for string manipulation, simulating window functions, populating test tables with lots of data, eliminating cursor logic, and many...
Performance: ISNULL vs. COALESCE
Mladen aka spirit1 posted a speed test of COALESCE vs. ISNULL. Reported result: COALESCE is faster. But leave it to Anatoly Lubarsky to argue with what was posted. He posted his own speed test, showing that ISNULL is faster. Anatoly's results showed a miniscule difference, "52 seconds" vs. "52-53...
Rowset string concatenation: Which method is best?
Yeah, yeah, yeah, let's get this out of the way right from the start: Don't concatenate rows into delimited strings in SQL Server. Do it client side. Except if you really have to create delimited strings in SQL Server. In which case you should read on. There was a little discussion...
Is PATINDEX faster than LIKE?
I keep seeing the same suggestion on various "tips and tricks" websites: For situations in which you might want to use LIKE in the WHERE clause, but for which indexes cannot be used, PATINDEX will perform faster. So, according to these sources, this: SELECT *
FROM tbl
WHERE PATINDEX('%abc%', col) > 0
is faster...
Paging in SQL Server 2005
I keep seeing questions on newsgroups about paging in stored procedures, and whether there will be a better way in SQL Server 2005. However, aside from a few answers in newsgroups, I haven't seen any content on how to do it. So I'd like to spend a few minutes and share with you the...
No, stored procedures are NOT bad
I recently found a rather old post from Frans Bouma's blog, "Stored procedures are bad, m'key?". Since comments are closed (he posted it almost a year ago), I have to reply here. I'll state my bottom line at the top: Stored procedures are not only not bad, they're necessary for maintaining loosely...
Pattern-based replacement UDF
As a personal challenge, I decided to write a UDF that will work just like T-SQL's REPLACE() function, but using patterns as input. The first question: How does REPLACE() handle overlapping patterns? SELECT REPLACE('babab', 'bab', 'c')
--------------------------------------------------
cab
(1 row(s) affected)
SELECT REPLACE('bababab', 'bab', 'c')
--------------------------------------------------
cac
(1 row(s) affected)
It appears that SQL Server parses the...
Caveats of the TEXT datatype
Someone named "Krygim" posted the following question today in the microsoft.public.sqlserver.programming newsgroup: "Will defaulting a TEXT field to an empty string take up more space than defaulting it to Null when no data is entered into the field. " Before reading any further, I ask that you think for...