SSMS 2017 RegEx

A short technical post on one thing I’ve found annoying.

Anyone who has worked with computers in the last decade has probably used regular expressions in some form or another, or “regexs” as they’re known as. First (as far as I know) popularized in Perl (though their history stretches back to the 1950s), they’ve become standard fair in most languages and tools and are very useful for complex matching and find and replaces.¬† And for anyone who has worked with computers for over two decades they often look like line noise when someone would pick up the phone in the house when you were dialed in via an actual modem.

That said, I first learned about their value in SQL Server Management Studio due to a great talk by Sean McCown. (note the post’s byline is Jen’s, but trust me, I saw Sean give the talk. ūüėČ

One of the powerful features is the ability to “tag” part of an expression so you can use it in your replace statement (see the above link for more details.)

But, here’s the thing, somewhere along the line (I think it was post SSMS 2014) Microsoft changed the rules of the game and it can be hard to find the new rules!¬† They have a post on using regexp in SSMS 2017. But as far as I can tell, it’s the old 2014 info, simply rebranded. Some of it, especially the tagging part does not appear to work for me. If anyone CAN make it work in 2017, please let me know how.

Let me give you an example. Just today I was given a script that had a lot of statements similar to:

DROP TABLE If Exists ##TempAttribute

Let me say I LOVE the new “If Exists” option for DROP Table, but, I needed to run this on SQL Server 2008R2 (I know, don’t ask!) and that syntax won’t work.

I needed to replace it with something like:

IF OBJECT_ID('##TempAttribute', 'U') IS NOT NULL
  DROP TABLE ##TempAttribute; 

Now, I’m naturally lazy and didn’t want to have to find and replace all 100 or so instances of this by hand. So, I reached for regexes… and… well it didn’t go well.

Based on the old syntax my find should look something like for the find:

DROP Table if exists {\#\#[A-z_0-9]+}

And for the replace

if object_ID('\1', 'U') is not null drop table \1;

Except, for the life of me, that wasn’t working. Every time I tried to tag the table name using the braces {} my regex would fall apart.¬† So of course I searched and got the link from Microsoft above that still suggests tagging with braces.¬† From previous experience I knew it was wrong, but that IS the official Microsoft page after all, so I kept doubting myself.

But, I was right in remembering things had changed.

The proper syntax is:

Drop table if exists (\#\#[A-z_0-9]+)

and

if object_ID('$1', 'U') is not null drop table $1;

The change to the search expression is subtle, changes braces to curved parenthesis .

The change to the replace is about the same, changing a \ to a $ but I suspect (I have not confirmed) that you’re no longer limited to just 9 tagged expressions.

And before anyone chimes in, I do realize there are some other ways of writing the search expression (such as I could have used :w+ instead in SSMS 2014 that would have worked in my particular case, since there were no temp tables with numbers, but this would not have worked in SSMS 2017), but this worked for me and wasn’t the point of this post. My goal was to focus on the change in tagging expressions.

Regular Expressions are still one of those things that don’t come very easily to me so I often struggle with the syntax and it doesn’t help when Microsoft changes the syntax rules between versions of SSMS (my understand they did so to make SSMS functionality better match Visual Studio, so I’m ok with this), but overall, I find them EXTREMELY useful and if you haven’t played with them, I highly recommend you start learning. There can be a bit of a learning curve for anything too complex, but it’s worth it.

My advice, start with learning how to “grab” the beginning and the “end” of a line and then go from there. This is the most useful thing to me at times when I want to add or remove something at the start or end of every line.

Happy expressing!

Barriers

Years ago, I had my team building out our racks at our new datacenter. I was quite proud of it. It was going to be our first planned from the start build-out of 6 racks, as opposed to the hodge-podge build-out we had done of 5 cabinets we had previously rented. Instead of just cramming in equipment where it would fit, we could plan where every piece would go and where we’d leave room for future expansion. This was in 2001, so it was still during a big Internet boom.

One of the things I had decided on doing early on was color coding cables. Red was for anything in front of the firewall for example.¬† On the backside, every server had two network cards, one for outgoing traffic (the “front-net”) and the second for traffic between the servers (the “back-net”).¬† To help distinguish between the two, I had ordered a bunch of green cables for the front-net, since that data was “safe” and green is “safe”, and blue cables for the back-net, both start with “b”. Sure, somewhat silly mnemonics, but they worked.

Until, about a week after we finally completed our datacenter move, not one, but two members of my five person team commented, “oh, they were different colors? I couldn’t tell, I’m colorblind.”

“Doh!”¬† So much for my nice color-coded system.¬† It can be fairly easy to overlook barriers when you don’t see them. Sometimes it takes more thought and action on your part. Sometimes it takes asking questions, or observation.

Lately I’ve been trying to look for more barriers that I might not have seen before and looking into what I can do to remove them. I’ll be the first to admit, I’m not always successful and I’m still learning. But hopefully we call can.

One area I’ve been focusing on this is in my work for the Capital Area SQL Server User Group. Right now I’m looking at two possible barriers. I say possible because I honestly don’t know if they’re issues or not:

First, I’m trying to find someone who can provide ASL interpretation.¬† Here’s the thing: we have never had, as far as I know, a deaf person attend one of our events, or even express an interest. Is that because there are no deaf DBAs in the area or because they know if they do attend, they probably will face barriers an person with hearing won’t face?

But, that actually begs the question: if there are no deaf DBAs in the area, why? Perhaps there are deaf people who WANT to become a DBA, but can’t because the barriers that exist well before they even attempt to attend one of our events.¬† I don’t know, but I hope to explore this issue a bit more.

Another item I’ve started to look into, is whether some sort of child-care services at our SQL Saturday event would help encourage more people to attend. My initial thought is, “it’s Saturday, so ideally a spouse can watch kids” or a similar solution. But, that’s assuming every attendee has a spouse or the extra money to hire a babysitter for an entire day. In other words, it’s making a lot of assumptions.¬† There’s definitely some major logistical concerns that I have to continue to explore before we can even think about offering it. But I’m also simply trying to figure out if it would make a difference.¬† Unfortunately, currently for our user group meetings itself, it would not be practical. But even then it may be worth looking into.

On a personal note, I have a friend who had a service dog. She was interested in joining me on a caving trip.  So we actually discussed the logistics of it and determined that it was in fact possible to take her caving with her service dog.  There was some logistics we had to work out and I did have to get permission from the cave owner.  Unfortunately, our scheduling never quite synched up and we had to forego the trip. But the point is, barriers CAN be overcome if one works at them and is willing to be a bit flexible.

Today’s takeaway: What barriers have you looked for and tried to remove? They’re out there, even if you can’t see them.

 

Janus 1 – 2018

As the year draws to a close, I thought I’d look back on the year a bit.

The goal of this blog has been to give me a place to reflect on the purpose of this blog.¬† I claim in My Goal Here¬†to want to reflect on how we think and what drives certain decisions. And I suppose at times that’s true. At times it’s to give actual SQL or IT related advice.¬† But at times, it’s simply an exercise in my ability to put fingers to the keyboard and words on the screen and to be a bit self-indulgent if I’m honest.

My most popular page this  year was a mixture of things: The Streisand Effect. It was a bit of an activism piece about events at my alma mater and a chance to broaden my blog to more readers. But, it did also serve to actually reach one of my primary goals; to reflect on how we think and make decisions; primarily sometimes by trying to tamp down an issue, we only serve to draw more attention to it and to inflame things further.

My second most viewed piece this year was one of several on sexism, especially in the IT industry: Math is hard, Let’s Go Shopping. I still haven’t finished the book mentioned in the post, but it’s on my list to finish. The issue of sexism in my primary industry is one that has grown in importance to me and I expect to write more about it in the coming year and to try to do more about it.

Reviewing my SQL Saturday’s in 2018, I had the honor of speaking at Colorado Springs, or at least trying to, which I wrote about here; SQL Saturday Philadelphia, SQL Saturday Atlanta, SQL Saturday Manchester UK (my first overseas SQL Saturday, where I had a blast!), SQL Saturday Albany, and finally SQL Saturday DC. I also presented at the DC SQL User Group in September.¬† All great times and I had learned a lot and had a great time meeting new people and reconnecting with old friends.

I put in to speak at SQL Pass Summit, but again didn’t make it. But I still attended and had a great time.

I also was pleased to be asked to write for Redgate’s Simple Talk where I know have two articles published on using PowerShell for SQL: My first and second. I’ll be submitting my third article in coming weeks.

But not everything I did or wrote about was SQL related or even IT related. In late June, 13 people became trapped in the Tham Luang Nang Non cave in Thailand. This became a world-wide media event that a few weeks later I found myself part of. Besides at least four blog posts of my own that touched upon it, in my role as a regional coordinator of the National Cave Rescue Commission I did close to a half-dozen media engagements, including one for The Takeaway NPR program.

Oh, one more interview I did this past year was with Carlos Chacon and Steve Stedman of SQL Data Partners: it was a podcast I did with them. You can read about my thoughts here and listen to the podcast here. And definitely go to Amazon and buy my book!

Anyway, it’s been a great, and eventful year and I appreciate everyone who has read my blog and even more so to those who have commented on it, shared it, or somehow given me feedback.

I’m looking forward to 2019. I hope you are too.

“So, why are you sitting here?”

I had been anticipating the question and it was a fair question, after all, I was one of two men sitting at the Women in Technology Birds of a Feather table at PASS Summit.  But let me back up a bit.

Last week was the PASS Summit in Seattle, an annual event that I mentioned two weeks ago that I was headed to. There are several thousand people that attend and in order to promote networking, in the massive lunch hall, they have a number of tables set aside for particular topics, i.e. “birds of a feather”. So if there’s a particular topic or interest group you are associated with you, you can sit at such a table and know you’re among like minded friends. For example on Day One I had set at the “Virtual and Local User Group” table.¬† But today, I found myself at the Women in Technology table.

So why?

Let’s back up even further. I grew up in a small town in the northwest corner of Connecticut. I can’t say my parents were poor, but we probably lived below what many would consider a middle-class lifestyle. However, I was very fortunate to have hard-working parents and grandparents who helped, and more than a bit of privilege.¬† What do I mean by this? One example comes to mind. A couple of years after college when I was first consulting, I needed a small business loan to cover a project for a client. I literally walked into the local bank and on my word got the loan I needed. Even then I realized I had a bit of privilege going on there.

As I’ve grown older, I’ve listened to more and more testimonies from women and persons of color and continued to realize how for granted I’ve taken many aspects of my life. As a result, I’ve worked to listen to others and try to increase their access to opportunities and gain the same privilege I was simply born with by being a white male.

So why was I there?

The question was not a surprise, since the table host, Kathi Kellenberger¬†had said she wanted to go around the table and ask folks why they were there. fortunately she hadn’t started with me first! This gave me time to think about my answer.

To listen. To listen to two women of color talk about their struggles and efforts to make it into the world of being SQL DBAs. To listen to other women talk about their experiences and to learn from them.

So I gave that and a bit more as my answer and then shut up and listened. It was a great lunch and a great experience.¬† As my friend, and WIT Virtual Group co-leader (along Kathi) Rie Irish is wont to say, “if women could solve these problems we’d have done so by now. We need your help”.

So to my fellow men out there, I would say, be an ally. Attend the WIT Luncheon (which was the day before) at Pass Summit.¬† Encourage women to speak at your User Group and at SQL Saturdays, stop others from interrupting them during meetings, amplify their ideas. And sometimes, just shut up and listen. And if you’re involved with SQL Server and PASS and want more information reach out to Rie and Kathi and contact the Virtual Group the manage, Women in Technology.¬† Trust me, men are welcome as allies.

 

SQL Pass 2018

Next week I’m off to the SQL Pass conference in Seattle.¬† This will be my 4th¬†peregrination to Seattle in 4 years. This has become an annual trip for me. There’s one very obvious reason for going and then a 2nd also important reason.¬† SQL Pass is one of the top events for folks who work with SQL Server. It’s a 3 day conference (plus up to 2 days of pre-con events, including at least one meeting I’ll be attending as our local group leader) full of technical sessions covering a wide range of topics related to SQL Server and related technologies.

Four years ago, when I first attended, I was a newbie and wasn’t sure what to expect. My father had recently passed and I wasn’t entirely sure I still wanted to make the trip. But tickets had been bought and the price to attend been paid, so I decided to go. One of the first (perhaps the first) session I attended, was a session by Kathi Kellenberger on how to get published as an author. I had for years toyed with an idea for a book and I figured it couldn’t hurt to attend and perhaps learn something. Her session was quite helpful and I approached her afterwards for more input and she introduced me to one of the editors at Apress. I pitched my idea and a few months later, the contracts were signed.¬† All I had to do now was actually write the thing.¬† So, I ended up writing¬†IT Disaster Response: Lessons Learned in the Field. (btw, I do obviously recommend it, it covers IT disasters, plane crashes and cave rescues. It’s not your standard cut and dry boring book on disasters.)

A friend of mine who owns a book shop once said, “anyone can write a book, it’s harder actually publish a book.” I had now done both. It was a bit bittersweet because my dad had been an English major and had always wanted to write a book and be published. Now, admittedly, he wanted to write fiction, which I think is far harder, and in his day, the idea of “print on demand” like what Apress tends to do, didn’t really exist.¬† And to be honest, at the end of the day, as Kathi warned me, if I was in it for the money, I’d be better off in terms of hours spent, getting a job at McDonald’s.

But, I digress. That book ended up being my first foray into actually getting paid to write.¬† As I mentioned in an earlier blog post¬†I’ve now contributed to Red Gate’s Simple Talk program with my post on an Intro to PowerShell. And my second post has been submitted and accepted and hopefully is going up in a few weeks or so.

So, to say my first PASS event changed my live would probably be accurate.

Beyond that one session four years ago, I’ve attended many other sessions and learned a wealth of knowledge and leveraged that in my job and in finding speakers for my local SQL Server User Group which I now lead. One of my favorite speakers I had in the last year was Bob Ward who did a remote presentation for us about SQL Server on Linux. And this despite me being a Patriots fan and him being a *cough* Cowboys fan.

So again, I look forward to seeing a lot of my #sqlfamily out in Seattle next week. But I still won’t be doing karaoke, sorry Aunt Kathi!

But I also mentioned a second reason for visiting: my non-sqlfamily, what I might call my #rocfamily.¬† The Rensselaer Outing Club has a number of alumns who all live in the area and we’ve started a yearly tradition of getting together for take-out Thai food at the house I stay in. ROC in its own way changed my life, among other things, teaching me how to be a leader and an effective decision maker.

In addition to all my fellow ROCcers, there’s at least one from my days on sci.space.* on Usenet (where I can still be found btw) and a few other friends I’ve made over the years. I’m quite looking forward to seeing them all.

So see you all next week in Seattle!

Social Deconstruction

No, this isn’t an article on deconstructing the relationship between texts and their meaning or anything that deep.¬†It’s about a bit of social disobedience of sorts.

Usually my featured images are only tangentially related to my posts (or sometimes not even at all). This time, however it’s the center of my post. Hopefully your browser/device is showing what I hope it to show: name a chain link fence that’s been partly torn back so that folks can get past it. It’s a bit hard to see in the photo; but basically the section behind the two posts with the chain between them has been ripped apart so that folks can walk through.

Why is even a topic of discussion? Because that opening wasn’t always there. In fact, when I first saw the fence, it wasn’t there.¬† Now, you may say “obviously it wasn’t always there!” (sorta like if you come across a pile of ash in a stone ring you can, without further evidence presume there was once a pile of wood there.)¬† This is the story of how fast it all happened and how I could observe it almost in real-time.

First some background. Several months ago I had agreed to give a talk at the DC SQL Server user group in DC this month; this also gave me a chance to catch up with some friends. Being the frugal sort, I found an AirBnB near the Rhode Island Metro station.

I arrived Thursday and took the Metro up to the stop. At ground level there’s a large footbridge that permits pedestrians to cross some railroad tracks. It connects to a foot/bike path on the north-west end. From here there’s an exit from the bikepath into a shopping center parking lot. If you look on maps, you can even see where this exit is.¬†rhode_island_metroI’ve circled the exit here.¬† This is where the photo was taken.

After crossing the bridge I discovered workers actually putting up the fence in the featured photo. This was Thursday, around 3:00 PM.

Now, knowing that the next official exit (because of other fencing, etc) was .2 miles in either direction, and because by walking through the parking lot to Rhode Island Ave was very convenient, I made a prediction that the fence wouldn’t last more than 2-3 days.

Sure enough, by the time I came back 2 hours later to take the Metro to my talk, I could already see people figuring out ways to jump the fence.

On Friday, I also headed to the Metro to go see a friend and I could see that the fence was still technically intact, but the area shown had become the de facto route over the fence.

Sure enough, Saturday afternoon when I was back in the area, 48 hours later the fence had been ripped open so that one could walk through.

My limited understanding of some European Common Law is that in some cases, if an “ancient path” exists, the landowner cannot deny access to it. For example, in New York state, if a river is navigable (and court cases have agreed that even simply using a kayak to traverse it deems it navigable) a land-owner can’t deny portage rights. So, I have to wonder if under some aspect of Common Law, the folks who destroyed the fence would be deemed to simply restoring their historical rights. Honestly, I don’t think so. But I’d call this a bit of civil disobedience (ok, not really since it’s not disobeying the state, but you get the idea.)

Now, I have no idea why the mall owners shut down (the entire place was abandoned) and put a fence around their entire parking lot. Presumably they were within their legal rights to do so (and given how litigious society can be, they perhaps felt they needed to).

But, just because they COULD do it, didn’t mean that the public would agree or support it. And they obviously didn’t. They took matters into their own hands and “fixed” the problem to their liking. Now, I can’t really condone destruction of personal property in most cases, nor do I necessarily want to promote trespass. But there’s a bit of me that thinks the property owners had this coming. They had, for years agreed to let the public use of their parking lot as a path¬† and apparently without any notice suddenly yanked it away. So while not really an “ancient path” it was a path and it had served people for years.

I wonder how long the fence will remain there and if it’s repaired how long before it’s broken again.¬† But alas, I won’t be around to continue watching.

 

 

Sharing and Building

I’ve mentioned in the past that I think it’s important to share and give back knowledge.

This week’s blog post will be short (sorry, they can’t all be great works of art.) But first I want to mention an event that just happened. I’m the leader of the local SQL Server User Group: CASSUG. We had our monthly meeting last night and I was grateful that Hilary Cotter was willing and able to drive up from New Jersey to present on Service Broker.

When I arrange for speakers, I always hope my group gets something out of it. Well, last night we had a new member visiting from out of town. So, it’s probably rare he’ll make future meetings. And today, I read from him:¬†“Hilary’s presentation was very informative and interesting. “ and “Now it has piqued my interest and I’ve started a Pluralsight course to learn more.”¬† To me, that’s success.

At our July meeting we had¬†lightning rounds. Instead of a single presenter, we had four of our local members present on a topic of their choice for about 15 minutes each.¬† One of them, presented on using XML results in a SQL query to help build an HTML based email. He adopted the idea from I believe this blog post. Twice now in the last month I’ve used it to help clean up emails I had a system sending out. Yesterday, I finally decided to cleanup an old, ugly, hard to read text based email that showed the status of several scheduled jobs we were running overnight.¬† A few hours later, after some tweaking I now had a beautiful, easy to read email.¬† Excellent work and all based on an idea I never would have come up with it my colleague had not shared it from his source.

And that leads me to a bit of self-promotion. When I created this blog, my goal was not to have lots of posts around SQL Server. Several months ago, a mentor of mine (I don’t know if she considers herself that, but I do, since she’s the one that planted the seed in my head for my first book: IT Disaster Response: Lessons Learned in the Field) approached me at SQL Saturday Atlanta¬†and mentioned she was now an editor for Red-Gate’s Simple-Talk blog section and asked me if I’d be interested in writing.¬† I was.

So I’m proud to say that the first of my blog at the Red-Gate Simple-Talk site is up. Go read it. I’m excited. As of today it’s had over 2000 views! Far more than I get here. And there’s more to come.

And here’s the kicker. Just today I had a client say, “Hey, I need to get this data from this SQL 2014 database to a SQL 2008 Database.”¬† I was able to say, “I’ve got JUST the answer for that!”

Sharing knowledge is a good thing. It makes us all far more capable and smarter.