Category: Blog

  • Tally Table Alternatives: #SQLNewBlogger

    We published an article recently at SQL Server Central on Tally Tables in Fabric from John Miner. In it he showed how this can be efficient. A day after he published it, he sent me an addendum to note that GENERATE_SERIES was available in Fabric and that could be used.

    I ran a few tests last week, but as I read the comments on John’s article, I realized that there were 3 ways of setting up these tally tables that I’ve used and thought I’d summarize them a bit in this post. There’s a fourth way, but I haven’t used it.

    Another post for me that is simple and hopefully serves as an example for people trying to get blogging as #SQLNewBloggers.

    Method 1 Using System Tables

    The first method, which I saw Jeff Moden use many years ago involves reading from system tables. The code typically looks like this:

    SELECT ROW_NUMBER () OVER (ORDER BY
                                  (SELECT NULL))
    FROM
       sys.all_columns ac1
       CROSS JOIN sys.all_columns ac2;

    Since this table has 12000+ rows in it, the cross join is 12k * 12 k, which is a lot. The row_number() function gives you sequential numbers in a list.

    This code works, but I can never remember which table and it does read from disk (or memory) to get the values. I suspect it’s slightly slower in lots of code than the other methods, but perhaps not enough to go and refactor old code.

    Method 2 Using CTEs

    The method I’ve liked to use is with CTEs. I have a SQL Prompt snippet set up with tt to give me this code.

    WITH myTally(n)
    AS
    (SELECT n = ROW_NUMBER() OVER (ORDER BY (SELECT null))
      FROM (VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10)) a(n)
       CROSS JOIN (VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10)) b(n)
    )
    SELECT n
    FROM myTally

    This CTE has two 10 row “tables” that give me 100 rows (10*10). If I needed more, I can copy/paste the “cross join” line and change the b to a c and I’ve got 1000 rows. Repeat that until you don’t need more rows.

    This is simple code, it’s in a snippet for me, and easy to expand. I’m not reading from anything and I can set the size as small or large as needed.

    Method 3 Using GENERATE_SERIES

    The last method is just a select from the GENERATE_SERIES() function. I can give it the number of rows, so this gives me 100 rows.

    SELECT value FROM GENERATE_SERIES(1, 100, 1) AS gs;

    I haven’t used this because I’m often on SQL 2019, not 2022, thought that likely should change.

    In any case, this works well for getting a large number of rows, and has the advantage of me being able to set a starting point, so if 1 isn’t appropriate, I can start at 7 or 29 or anything else. I can also set a step to skip some numbers.

    I like that this is less code and built in as a function, but only in SQL Server 2022+

    Summary

    I haven’t given any reason to pick any of these over the other. The post from last week shows that GENERATE_SERIES seems to be slightly faster, but that wasn’t really a comprehensive performance test. I like both method 2 and 3, and in modern version I’d lean towards using method 3 as it’s built in and less code.

    I’ll do a performance test elsewhere and write a bit about GENERATE_SERIES and the options available.

    SQL New Blogger

    This post took me about ten minutes to write, as the code is simple and the longest part was really copy/pasting links and code from SSMS or articles. The rest was quick and easy.

    This is a short post that can showcase your learning, and your thinking about different methods. I’ve given a few examples of that above.

  • T-SQL Tuesday #184–Mentoring

    This month’s T-SQL Tuesday blog party is hosted by Deborah Melkin, and it’s a good one that asks us where we are making the world better. The topic is mentorship and sponsorship, which is great. We all ought to pay it forward or pay it back, depending on how lucky we are. I believe strongly in this and am glad to see the topic posted.

    I still manage the T-SQL Tuesday list, and I’m always looking for hosts. I have a few scheduled for 2025, but I can use more. If you’re interested in hosting, hit me up at one of these places:

    The Mentoring Experiment

    Andy Warren and I ran The Mentoring Experiment a few times in the past before life got too hard and we decided to pause. I wrote about mentoring as well, and didn’t publish a lot on the experiment as most of the conversations were private.

    I’m somewhat sorry we didn’t continue this, but it proved to be a little overwhelming at that time in our lives.

    My Mentoring Experiences

    I’ve had a few mentors in my life, and while some I’m not comfortable sharing, there are a few that stand out.

    In high school, I had a mentor who was a Navy Pilot. He was a client of my Mom’s and she asked him to give me rides to and from karate, where he was also a student. On our rides, he shared some advice, some thoughts on life, while taking an interest in me. A few things stand out, one of which I still think about today: before I send an email, how would I feel if this were made public? This keeps me from writing too emotionally.

    For the last 20+ years, Andy Warren and I have talked most weeks of the year. We miss a few when we’re on vacation, or I’m traveling, but he has been a great mentor to me, helping me think through life’s challenges. I hope I’ve done the same for him.

    Giving Back

    I think part of what I should do is try and make the world better. Part of that is my trying to get a variety of people to write at SQL Server Central or host here. I’ve reached out through my network to find women or minorities that would participate in our data community, and give them a voice. I’ve been less successful than I would have liked, but I have had a little success.

    I’ve also convinced a few people to speak. I usually look for people at events that are engaged, ask interesting questions, or just have good conversations with me. I’ve found it takes months, but if I encourage them, I’ve gotten some of them to write or speak for free to share their knowledge and grow their own skills. There are a couple successes who many of you likely know their name and a few more that tried it and gave up.

    I think the more you encourage people to engage in life, the more they (and you) get out of it.

    I also try to do this as a coach, getting them to grow and learn more than just the sport. I think it’s worked out well as many kids keep in touch over the years.

    I think many of you can do the same thing. Help others grow and find their own success, with encouragement, support, and a friendly ear.

  • A Quick Trip

    I’m sure some of you have gone on a quick business trip before, maybe even regularly. I’ve had a lot of travel over the last few years, and quite a few short trips to various cities for events or customer visits. I’m expecting a few other stretches this year that will be busy, but not like this.

    I’m off to London today, actually I left last night, and I’ll be there around 940a local time today. I am jumping on an 1130a flight Wednesday to return, so this will be a 50 hours trip to London. I’m going for the Redgate Summit, and I’d usually make this a week trip and get to the office in Cambridge, but I am bookended by prior commitments.

    Yesterday (Sunday) had to coach a team at a volleyball tournament in Denver. This coming weekend, I need to be in New Orleans Friday to coach over the weekend. I guess I could try to stay one more day and get to Cambridge, but I would like a minute to decompress at home. So back Wed and head to New Orleans for the weekend.

    Fortunately this type of trip is a rarity, but it has happened a few times in the past and I’m sure it will happen again.

  • A New Word: Waldosia

    waldosia– n.  a condition in which you keep scanning faces in a crowd looking for a specific person who would have no reason to be there, as if your brain is checking to see whether they’re still in your life, subconsciously patting its emotional pockets before it leaves for the day.

    This is an interesting word to me, and I find myself in waldosia at volleyball tournaments looking for past players. I think it’s a shadow of a desire to see a player I’ve coached in the past and hoping they had made time to come.

    This happened recently as I was up in Greeley, CO at a tournament. I have a few former players at CSU, which isn’t far. I somehow hoped I’d see a former player, but they would have no reason to leave college and come, especially early on a weekend morning.

    I probably have waldosia at SQL Saturday and other events, sometimes looking (hoping) for a friend that might pop by the event, even if I know they might have moved on in their career.

    From the Dictionary of Obscure Sorrows