• Dynamic SQL- Intro

    In the world of SQL Server database development, there is an incredibly powerful tool that is usually
    over relied on, or not relied on at all. This tool is called Dynamic SQL.

    For the purposes of clarity, I will call the process of application code dynamically generating SQL strings as ‘ad-hoc SQL’ while referring to essentially the same process happening within a stored procedure as ‘dynamic SQL’. Yes, they are similar, and in my opinion there are ideal places for both. However, it’s been my experience that applications are often written entirely under one approach or the other, while the best approach may be somewhere in the middle.

    What is Dynamic SQL? 
    A simplified explanation would be that it is building a string and then executing that string. Keep in mind that I’m referring to building and executing these strings within a stored procedure.

    A normal SELECT statement might look something like this:

    SELECT * FROM Person.Person
    

    While a Dynamic SELECT statement would look something like this (Using EXEC)

    declare @SQLStatement nvarchar(max)
    
    set @SQLStatement = 'SELECT * FROM Person.Person' 
    
    EXEC (@SQLStatement)
    

    Or more like this (Using sp_executeSQL)

    declare @SQLStatement nvarchar(max)
    
    set @SQLStatement = 'SELECT * FROM Person.Person' 
    
    EXECUTE sp_executeSQL @SQLStatement
    

    Minimizing the Threat
    People are often afraid of Dynamic SQL and this fear is usually tied to security. Being able to execute a string could lead to a malicious string being executed, and this string could contain instructions to DROP a table or to display important internal information that should not be getting exposed.

    There are several things that can be done to minimize the threat potential when using Dynamic SQL.

    These things include

    1) using sp_executeSQL instead of EXEC. 
    sp_executeSQL is  a stored procedure with built in SQL injection protections. Parameters are where more of the threat lies, so taking care to make sure that your parameters don’t contain things that could harm your system is something that needs to be done.

    Here is an example where a parameter is in play. The parameter @LastName gets passed in through the query string, but also as a parameter to the sp_executeSQL call.

    declare @SQLStatement nvarchar(max),
            @LastName nvarchar(100),
     @Parameters nvarchar(max)
    
    set @LastName = 'Walters'
    set @Parameters = '@LastName nvarchar(100)'
    
    set @SQLStatement = 'SELECT * FROM Person.Person WHERE LastName = @LastName'
    
    EXECUTE sp_executeSQL 
      @SQLStatement,
      @Parameters,
      @LastName
    

    2) Another thing you can do to minimize risk would include setting up a login-less user account to execute sp_executeSQL with.

    3) Make sure the application code does not allow unsanitized user inputs to make it through to the database. Security is about layering after all, and the application is one of the layers!

  • On Becoming A #SQLNewSpeaker

    I did it. I became a PASS speaker. My first event was at SQL Saturday Phoenix 2017 which happened on March 25, 2017.
    I skipped the normal process of presenting at the local user’s group and went straight for a SQL Saturday. Why would I do that? Well, two reasons:

    • Not scared, didn’t feel the need to practice at a local UG first to get over my “nerves”.
    • The local UG meets at 3pm! I work a significant distance from there, so I’d have to take off a half-day of work to make the trek there.
    I wouldn’t advise taking my non-traditional route to speaking, unless you’ve had tons of previous speaking experience and/or a degree in education.
        I really wanted to speak, but had no good ideas for what to speak on. Everyone covers TSQL. I could do something that focuses on math from a non-statistical angle, but I wasn’t excited about that topic either. I was working on a really cool new thing at work (BIML) so I submitted a session abstract on that topic. I knew that in order to be an effective speaker, I must be passionate about my subject. BIML at least gave me that.
        Phoenix selected that session! Woot! My preparation for the session happened mostly at my day job. I was in a lull between projects (usually ETL w/SSIS) so I had time to do some research & development. I was able to give a mini presentation at my job on the subject of BIML and why we should use it. My boss green-lighted my continued work on the project, so I worked on it at work while only needing to abstract it (setting it up to run against an AdventureWorks database instead of a work database) at home. The planets aligned!
        I never had a chance to practice verbally. I had planned to the weekend before the session, but I got pretty sick with bronchitis and asthma and almost lost my voice. I decided to forego the verbal run through, and just rehearse in my mind instead. Again, I do not advise using this approach. A verbal run through is a good thing! Especially if you’ve never spoken!
        The time to travel to Phoenix arrived. I was still under the weather, but there was no way I was going to back out of this. I went to the doctor the day before I got on the plane and got some new asthma medication to treat the bronchitis. That would at least keep me out of the ER in Phoenix.
        I made the conscious decision to flip the switch to “extrovert” in my mind, and go out of my way to introduce myself to people at the conference and socials. I figured that most people in tech are probably introverts, so they might actually appreciate my introductions. It worked! On Friday, there was a speaker event at a local bar, and I met a handful of people that I had really good conversations with. Grant Fritchey was also speaking at the event, so I made sure to talk with him. He’s the only technical writer that I’ve bothered to print! I really hate reading PDFs. PS: He’s NOT scary! I also spoke with Peter Kral. He won #SpeakerIdol at PASS Summit 2016, and it was quite fascinating to hear his take on the whole event. I don’t think I’d ever enter that. I know my weaknesses, and only having 5 minutes to speak would make me speak really fast. No bueno. I’m a detail person, and by no means a salesperson, which is what you have to be in such a limited amount of time. I also spoke with Mindy Curnutt. I didn’t realize that I had attended a session of hers a few years ago, and remembered thinking at the time that it was odd that she worked for a company that I’d dealt with as the IT Manager for a produce company. I went to their user’s conference in fact. We spoke about those industries and the problems we encountered. Wow, small world!
        Anyways, I’m really glad I flipped that switch. Met some great people and had some great conversations with them. In fact…I managed to get two of them to attend my session.
        Saturday arrived. My session was scheduled for the last slot of the day. I knew that the odds of having a bunch of people in my session were small. BIML may be new and exciting, but unless you work with SSIS/SSAS on a regular basis, you probably wouldn’t be attending my session. Grant Fritchey attended my session, which turned out to be huge blessing. I ended up borrowing a cable. I had problems connecting to the projector, and that ate of ALL of my time before the session. I also fought a new laptop that I didn’t spend enough money on that took a million years to load SSMS and Visual Studio.
        My presentation, despite the road bumps, went really well. My audience was small, but I strove to make it relevant and coherent. I already mentioned that I was passionate. I think I succeeded. I feel that I succeeded. There are things I’d do differently, like bring all the cords. I’ve already upgraded the hard-drive on my laptop to SSD so I won’t be terrified of rebooting the laptop when SSMS doesn’t connect, but overall, I was happy with it. I think I’ll spend a little bit more time in the intro about what BIML is and what you’re doing when you use it, but other than that, I think my angle on covering the BIMLSCRIPT (C# within the BIML files) was a good plan. Grant gave me some feedback immediately afterwards, and he said I did a great job. Phew! Someone who knows how to speak said I did a great job! Yay! My teaching degree wasn’t a complete waste after all!
        At this point, I think it’s likely I will present again, but I’m not sure when or how often. The planets aligned for this, and I suppose they may align again. I will be presenting the same session to the local UG in May of 2017. After that though? I’m unsure. I would like to speak at PASS Summit one day.
        My advice to you if you’re considering become a speaker? Try it at least once, but remember to strive for passion, relevance, and coherence. You need to be useful to your audience. Also, flip the switch to Extrovert! Introduce yourself to people you’d like to meet. You won’t regret it. Tech geeks are awesome!
  • PASS Summit 2016

    Last week I attended Pass Summit 2016 in Seattle. It was my third time attending the Summit, having attended every year since I learned about its existence.

    I am an introvert. These types of events are hard for me. I usually spend much of my time alone, just trying to absorb as much as possible from the sessions that I attend. I find it easier to get on a stage and dance in front of a crowd than to introduce myself to people. It’s odd, I know, but being on stage gives me a chance to hide behind a character or to express emotion through movement. Not through awkward conversations where I’ll surely stick my foot in my mouth.

    Since I’ve been attending Pass events with ever increasing regularity, I’ve come to know some people in the Pass community. I’ve attended two SQL Saturdays, and three Summits. I joined Twitter and became a part of the active Twitter community that exists through the #SQLFamily hash tag. Through time, I’ve come to learn the most recognized names in the community and who to take sessions from.

    This Summit was a unique experience for me, for a few major reasons. The week before I traveled to Seattle, my new boss sat me down for a 5-month performance review. In that review, he told me that I’m “doing great technically” but…I’m “not doing so well talking with the customers”. I could’ve cut him off at the first part, because that’s really the only part that matters to me. I already know I’m not great with people. Let me clarify that a little more- I can be really good with people, at times. I am not good with people who are overly needy, who like to come up with excuses for why they aren’t doing a better job, or who play politics to try and get ahead. I’m good with people who work hard, are smart, and preferably are a combination of those two things. If your incompetence puts what I perceive to be undue pressure on my life, in time, I will crack. I will become sarcastic and unpleasant. I am not the most patient person in the world, and honestly, I do not aspire to be. I mitigate my anxiety every way that I know how, and sometimes sarcasm works. I hate to admit it, but it works. It causes people to take a step back away from me, and sometimes that is exactly what I need.

    As a result of this rather unpleasant conversation, I decided I would take some “professional development” sessions. I usually avoid those like the plague, and spend all of my time learning new technical skills or improving existing ones.

    The first one was Fundamentals of Tech Team Leadership, by Kevin Kline. In Kevin’s session, I learned that my ONLY persuasion technique will not work on certain types of people. It’s the only one I use because it’s the only one that works on me, and the only one that I respect. That technique would be rational appeal. I see the others as forms of manipulation, and I try to avoid them. Most people are not like me though, so this is where I go wrong. It is not logical to try and convince someone logically if they don’t value logic. Ironically, I wasn’t being logical in my approach. There’s a blinding flash of the obvious!

    The second one was 500-Level Guide to Career Internals by Brent Ozar. I was intimidated by the title, and initially didn’t want to attend. By the time Friday rolled around, I decided I was too mentally exhausted to try and wrap my brain around something complex, so I decided I would take it easy and people watch Brent and his team in this session. I am so glad that I did!

    Brent managed to connect some dots in my brain that have been previously disconnected. Those two dots are consulting and presenting.

    I have my own freelance consulting business, and it usually gets me an extra $10k-$20k per year in before-tax income. I want to grow that business. I’ve even thought about eventually getting away from the traditional full time job and just being a consultant, but getting enough customers to get me there is daunting.

    I also want to become a Pass presenter. My education was in Mathematics Education, and I enjoy teaching other people and public speaking. Up to this point, the only thing holding me back from presenting was the intimidation I feel being surrounded by a bunch of incredibly bright people who are at the top of their technical fields. What would I present on? Sure I know some stuff, and some of it pretty well. How can I be interesting AND useful, at the same time in the same presentation? What value would doing this add to my life and my career? I’ve got a full time job, a family, and hobbies that I feel passionately about. Yes, I love teaching, but I also love my family and being in shape.

    Along comes Brent, who helped me to understand that these two things are interrelated.  Presenting and blogging can help increase my client base for my freelance business. Again, another blinding flash of the obvious! I was so hung up on not wanting to be a teacher that I missed the bigger picture. I thought that I’d only want to be a presenter if I wanted to run a consulting business based around teaching other people. I really missed the boat on that one! Yes, I see it now! It can help me land clients. This is marketing, in the digital age. Of course.

    So what now? I plan to stay at the day job, blog more, and hopefully present. I’d love to enter the Speaker Idol competition at Summit, and win the chance to teach an entire session at a later Summit. I’ve come to the conclusion that whatever I do, I must continue to surround myself by these people. I am learning very much from them, things I didn’t even imagine that I wanted to learn, and I’m excited!

  • SQL Server Missteps

    Let me start by saying that I am NOT a DBA, by choice. I am a developer. I am a SQL Server developer with experience in application development. I have worked with databases for almost 10 years. I only briefly worked with ACTUAL DBAs when I worked in the healthcare industry, which only lasted 9 months. I have worked with several senior developers who were assigned DBA duties.Being near databases you pick up things. You observe and get a general gist of what an actual DBA would do all day. I think for a brief second I aspired to be a DBA- (that’s where the money is, right?) but quickly saw the error of my ways. I really have very little interest in being away from the code.

    At my day job, I do all things IT. I support an accounting ERP that is on SQL Server 2008r2. I use TSQL, SSIS, and SSRS mainly. Since I am literally ALL THINGS IT, I am the de facto DBA. Brent Ozar was right! All I had to do was be a developer and stand near a database!  Brent Ozar’s Advice

    Great, so now that those three letters are officially on my resume, people want me to do actual Database Administrator things. This is fine at my day job, because the data is relatively small. My two biggest tables, which are archive tables, hold 2 and 3 million records. The company I’m at now is also really good about spending money on IT, so my SQL Server box is pretty freaking fabulous. It runs on VMware, and has plenty of RAM and space dedicated to it.  If I wanted to reindex all of the tables in the application, it might take 15 minutes. But not everyone is as lucky as I am.

    I also freelance. My main freelance client runs the same software that I support, also in a 2008r2 environment. However, they are a much bigger company than where I’m at now. If I were to compare sizes, I’d guess they’re 10 times bigger. Most of the time, they only ask me to code thank goodness, but occasionally they’ve asked me to do some DBA things.

    Enough background. Here are my top 4 most painful moments involving SQL Server. Things I wish someone had told me years ago, but I’m not sure these lessons would be burned into me like they are now.

    1. Forgetting the WHERE Clause– No big deal if you’re running a SELECT statement. It’s taking too long? Just hit the cancel button. On an UPDATE though? Yeah, be sure to wrap that inside of a BEGIN TRANSACTION. I ran an UPDATE where I was supposed to change a transaction counter inside ONE record in a table with only maybe 100 records, but by missing the WHERE clause, I changed ALL of the transaction numbers in their entire accounting system TO THE SAME NUMBER. I had to call them, and ask nicely but in an urgent voice “You need to get all of the users out of the system RIGHT NOW!” I knew full well what the application would do. It would begin throwing errors- not real errors, just messages- that it can’t get a transaction number and you can’t save your transaction. No Bueno. Users would begin freaking out and all hell would break lose. Luckily, I had an awesome coworker at the time who knew the data so well that we quickly fixed the bad transaction numbers and everyone was able to resume work. Phew. That was stressful. Moral of the story? Use the ‘BEGIN TRANSACTION/ROLLBACK/COMMIT’ commands
    2. Disabling All Indexes on a Table- This was my freelance client, which was the same client affected by #1. Once a month, they’d have me perform the “archive” process, which would move records from the current tables to the history tables, but it was done through the UI. I’d only archive one or two months at a time, but gradually this process ended up taking all night. I researched indexes, and inserts/deletes, and learned that you can greatly speed up the INSERT process by disabling the indexes. So one night I decided to try a new approach- I disabled the indexes on the main table, which was roughly 30 MILLION rows, and then ran the archive process. It was incredibly fast! What took 7 hours now took 5 minutes! I had disabled the indexes through the UI in SSMS, so I thought I could just re-enable them the same way. That didn’t work. The UI flaked out on me. Luckily though, I could tell the indexes weren’t back. I quickly figured out how to reindex the entire table using TSQL commands, but the process took all night. I had no idea how long it would take, so it was a very stressful night indeed. I really wish there was a decent way to calculate how long it’s going to take to reindex-WITHOUT having to TEST it! Who has a spare SQL Server configured EXACTLY as their production server? I don’t. Next time, I think I’d reindex ONE index and time it, and then do some sort of wild projection. Moral of the story? Disabling indexes makes INSERTS go faster, but rebuilding the indexes may take time! Being on Standard Edition SUCKS.
    3. Do NOT Do This In Production! A little more background- since I’m the DBA and all things IT, and I work for a smallish company, I have no need for a “test” SQL Server. I still have a test environment, but those databases are on my production server. So when a friend of mine who works for a much bigger company suggested that I run DBCC FREEPROCCACHE, he didn’t realize the kind of power I wield. When the command took a little longer than I was thinking it would, I freaked out and cancelled it while it was beginning to occur to me that this might be a SERVER specific command, and not a DATABASE specific one. “Don’t do that in production” he says, afterwards. Ooops. It pretty much wiped out my entire plan cache. I’m sure the system slowed down, but no one said anything. Sometimes it’s a good thing I’m the only one at my company capable of understanding the mistakes I make. Glenn Berry, you are a wise man. Wish I had read this first: Glenn Berry- Fun With DBCC FREEPROCCACHE Moral of the story? Some DBCC commands may be database specific, but others are SERVER specific. Know what you’re doing BEFORE you hit EXECUTE!
    4. Don’t get married to BEGIN TRANSACTION! After I forgot the WHERE clause, I used BEGIN TRANSACTION everywhere. Most of the time, it’s fine. Except for that one time I was trying to DELETE a ton of records from a very big table, before a major server upgrade. That night was full of mistakes, but at least I suggested that a full backup be taken prior to the migration. I should’ve INSISTED. Anyways, it was asked of me to DELETE a bunch of records, but the fact that I only had so long to do it wasn’t clearly communicated to me. I had wrapped the DELETE statement inside of a BEGIN TRANSACTION, not realizing that when you do that SQL Server logs things differently so it can roll everything back. The DELETE  was taking forever. Who knows how long it would’ve taken, because I had to CANCEL it. And then I crashed SSMS because it wouldn’t close. That threw the database into RECOVERING state, which meant no server migration could happen until that ended. That was a very stressful night for me and the IT manager of that company. I called Microsoft on that one, hoping there was something we could do to get it out of that state sooner. Nope, they said. Just let it finish. Eventually it finished, and by some miracle, the server migration finished on time too. Luckily, Microsoft didn’t bill me. Moral of the story? You don’t need to ROLLBACK everything! Use BEGIN TRANSACTION wisely.
  • Salvation By SQL- My Journey Into Tech

    My journey into tech began when I was a young girl. My father was a huge influence on me. He worked with computers, initially doing radar and electronics with the military, and then owning his own businesses after he retired. His first business was a video/audio/computer repair store, back in the days when people would pay money to have a VCR repaired. His next business was a computer hardware/networking contracting business. Companies in Las Vegas mostly would pay him to set up and configure their computer networks and their phones.

    It wasn’t what he did that influenced me, although I was exposed to computers very early on. I remember the days before Windows when you had to use DOS to do anything, and I watched my dad do anything from soldering parts onto motherboards to running DOS commands.

    My journey began with mathematics. My dad’s sister had a math degree and taught high school and college classes for many years, but she lived across the nation from us. My dad never had any bias towards math, and more specifically, towards women and math. He never told me that I didn’t need to be good at math. He helped me with my homework when I was very young- but not very often since I didn’t need much help. He never discouraged me from trying to get A’s in math. My mom was horrible at math! But I was more like him, and she understood that.

    I did well in high school, but not fantastic. I was in all of the honors classes with all of the other smart kids- my friends. Most of my close friends ending up ranking as valedictorian or somewhere in the top 10. I think I was in the top 40. I wasn’t as driven as they were. That would come later.

    I went to college right after high school. I toured the engineering department at UNLV but was scared off by the foreign professors with thick accents. My first year I’m not sure that I had a major. I took the required classes but mostly partied. I lived in the dorms for the first year, and in hindsight that was an absolutely awful idea. BOYS! In my dorms! Across the hall from me!

    Somehow I survived that year, and managed to pass my first college level Calculus class. The professor was Chinese, with a thick accent. I got a terrible grade on the normal grading scale, but it curved to an A because of how awful the teacher was. That scared me away from math for a few years.

    I meandered through a handful of majors after that, from criminal justice (I wanted to be a lawyer), to veterinary science (but I’m allergic to animals), and then full circle back to math. Secondary Education- Mathematics, I wanted to TEACH. A few short years had passed and suddenly things in my brain clicked. Calculus 2 and 3 were a breeze. I had friends I would study with, and I’d be the one explaining things. All of a sudden I was really good at something, not just adequate, but GOOD. By the point I took Probability and Statistics, which was near the end of my college experience after I had taken a ton of theoretical proof classes, I was incredibly good. That class was full of engineering majors, but I was the one at the top. I aced every exam, and got the extra credit. Honestly, I really hit the jackpot on that one. I understood the concepts easily enough, but my winning strategy was my procrastination techniques. I waited until the night before the exam and did ALL of the homework. That helped me get to know the book very well. The exam was open book, and most of the other students thought that meant the exam would be easy because you could look everything up. They were wrong. The tests were incredibly long, and those students weren’t fast. I was fast. It was awesome! That class also made me appreciate working with actual numbers again, after having spent so much time in abstractions.

    Besides math, one other very important thing happened during the course of my college experience. I had an advisor in the department of education, at UNR. It came time for me to take a computer class, and the options were the basic computing (word/excel/etc) class, but also an intro to programming class. I told him that I wanted to take the programming class. That guy, whose background was in mathematics, told me that just because I was good at math didn’t mean that I’d be good at computers. The nerve! I angrily told him that computers were in my BLOOD, and I’d be taking the harder class. So glad I didn’t cave to that guy’s shortsightedness.

    My first class was CompSci 201-Intro to Programming, in C++. By this point I was married and my husband had taken the class the semester before and flunked. We took it together, and in fact, I was pregnant with my first child that semester. The class was amazingly easy for me, and I helped my husband get through the class. I questioned my major- why didn’t I get into this sooner? I was so close to being done with my degree that I decided to finish on the track that I was on. Oddly enough, I’ve never taught, so it all worked out pretty well.

    My next brush with computer science would come years later when my husband was finally finishing up his degree at BSU. His major was Computer Information Systems in the Business Department. It’s not as technical as a computer science degree, but he had to take a few programming classes. Among them was a SQL class. Again though, he struggled. Three weeks before the end of the semester it became apparent he’d probably lose his financial aid if he flunked this class. So I opened his book. Taught myself, and then taught him. If I remember correctly, it was PL-SQL. He passed the class!

    A month or so later we decided I needed to get a job to help support us so he could focus on school more and work less. I applied for some jobs. Among them, an actuarial entry level position and a job with a software company. The software company called, the actuarial company never did. The software company interviewed me and hired me at the interview. I remember telling them how smart I was, and how quickly I learn things, and how awesome my memory is. All true- but I’m really not that confident. You have to be confident on interviews though, and I knew this. It was painful selling myself like this. I was so confident in my abilities and I really wanted the chance to work for them, I offered to start at $13/hour. Yeah that was ridiculous, and it was 2006! They took me up on it.

    The language was FoxPro, which I refer to now as the Great Equalizer. The vast majority of programmers who came to work at this company would have to learn FoxPro on the job. I learned quickly. I was doing billable work within two weeks, and leading big projects within 3 months. When it came time for a raise, my boss bumped me up significantly. Within a year, I was teaching other programmers and I was promoted to “senior programmer/analyst”. Honestly, FoxPro was not hard. However, the environment it was used in was difficult. It was built by a company much bigger than we were, and they took full advantage of the object oriented environment. Inheritance was everywhere. A programmer could easily get lost in the code if they chose to “step into” every line of code they saw while debugging. I didn’t get lost. I seemed to have a knack for filtering out the extraneous information around me and focusing on what I needed to. Maybe it all that practice solving word problems in math.

    I was at that software company for over 6 years. I loved the work immensely. I was on the front lines, dealing with customers, traveling, overseeing projects, coordinating upgrades, you name it I did it! Except for selling- that’s what my boss the owner did. He often sold “vapor-ware” though, and I’d end up coding a huge project quickly under pressure as a result.
    Eventually the stress started to catch up to me. Troubles started to surface with my mental health and in my marriage. I was always working, even when I was home. I really took ownership of the things I worked on, so if there were problems, I worked tirelessly to rectify those problems. Most of the time those problems were because of poor leadership at the company, and poor quality with my coworkers.

    Due to the economic downturn of 2008, technical jobs became scarce in Boise. Two big companies in the area had laid off massive amounts of highly skilled workers. The company that I was at was thriving, and growing, even during this downturn. Finding another job during this time would be nearly impossible. I looked for years, but never got as much as an interview. I remember at one point when the software company was hiring we received over one hundred applicants for three positions. I was involved in the hiring process, and it was intense. I was glad I wasn’t unemployed during that time.

    Years passed, the stress continued, my marriage held together somehow, and eventually I decided I had to take drastic steps to get out. I applied for graduate school, and got in. I was going to get a master’s in mathematics, and my plan was to focus on statistics as much as possible. The day I told my boss that I was going back to school he nearly croaked (we were in Iowa on a business trip together, and that business trip was going horribly. Again, lack of leadership.) Shortly thereafter he told me to name my price “north of where I was now but less than 100K”. I never told him a figure. I was tired of being married to that job and I wanted a divorce! And there’s no way I could’ve taken that kind of money from them. His wife, who also helped run the company and was there every day, didn’t understand all that I could do. She wasn’t technical, and had no perception of how smart I was or how much money I was worth. She’d resent me and she’d resent her husband for giving me that kind of money. No thank you.

    I went to school for one semester, but it didn’t go well. Things were much different now. Maybe my brain just didn’t work that way anymore, or maybe the professors at BSU were really that bad. The classes I was taking were far too on the abstract side of math, even from the Statistics professor, and not enough on the applied side. I didn’t like that at all. Not what I envisioned one bit. I didn’t go back the second semester, and then I ended up landing another job! FINALLY!

    This second job in tech was for a healthcare company that had several teams of highly technical people. I was hired as “SQL Developer II”, and initially I felt out of my league. I didn’t know as much as it seemed when they interviewed me, I just knew enough to sound intelligent during the interview. I interview well. I’m personable and I talk clearly, at least during interviews. I’m great at technical interviews though, my memory serves me well. People are usually impressed.

    I did very well at that job. Huge data set, in health care claims processing, and much to learn. I liked the coding, which consisted of writing TSQL stored procedures and functions. That took up about half of my time, but the other half was spent in meetings. Testing meetings, release meetings, you name it meetings. That was boring.

    I had a few run-ins with one particular female coworker. She wasn’t a developer though, and she was a pretty smart woman working in a lower level management position of a configuration team. She was also a manipulative conniving @!%*$. Word seemed to spread pretty fast that I was smart, but she went out of her way to throw me under as many busses as she possibly could. She would tell me that she needed something from me, I’d research that and then respond to her through email that I needed something from her, she’d neglect to see that email, and then blame me for dropping the ball. She’d loop in as many bosses as she could on just about every email string, in an attempt to make me look bad to upper management. It was quite frustrating. Her efforts really bothered me, but they weren’t very successful.

    When it came time for me to give notice that I was quitting, the boss over my small team told me that they were really impressed by how fast I picked things up and they wanted to promote me to a different position. This company was national, but had accounts in every state. The job they wanted to promote me to was one that served the company nationally instead of just locally. WOW. The type of promotion that people at this company aspired to, and they were offering it to me and I hadn’t been there one year! Again, another chance at $100K. It would be much more work, and it’d be stressful. I wasn’t ready for that. I enjoyed having time with my family again, even though the days at work dragged by and I was bored beyond belief. So I declined.

    I took a position in Salt Lake City for a company that I had visited while working for the software company in Boise. They were impressed by how quickly I got things done, and when they saw that I had left the software company, they started talking to me. The people at this company are among the nicest most generous people I have ever known. I couldn’t resist that opportunity, even though we’d need to pack up and move. My husband was unemployed at the time, so it was perfect timing. We made the big move! My new title? IT Manager. Department of 1 (me!)

    Back to supporting a FoxPro application, but they’re on SQL Server thank goodness. I took what I learned from the healthcare company, and even some while just on the periphery (SSIS/SSRS- thanks Harsha and Will!) and applied it to my new job. I installed and configured SSRS, created a ton of reports, and then automated those reports for email delivery. My bosses thought I was a genius! Shhhh- it’s super simple to automate reporting with SSRS! But they don’t need to know that. I use SSIS and TSQL to automate things that we need to happen with the data, thereby reducing the likelihood of user error or even reducing the need for a person to do a certain job. I’m also the DBA, the reluctant DBA who’d rather develop, but I’ve been able to learn a ton in my tiny little environment on a standard edition of SQL Server 2008r2. I learn from people’s technical blogs and websites, thank goodness I’ve got awesome google powers and smart people out there blog as much as they go. They’ve helped me countless times, from answering other people’s questions or from just covering a subject they’ve chose to write about. I’ve been to the Pass Summit twice now, and I get to see these brilliant people present there and at SQL Saturdays. Thank you #SQLFamily! I look up to you so much!

    So now I’m beginning to get bored at this job too. I’ve done so much in the short two and half years I’ve been there. Lately I spend the majority of my time doing things I’d rather not do- supporting the network, the hardware, the users. I want to code! They do give me a long leash, and I have creative license to a certain extent, so I’m using that leash and license to learn C#. I’m planning on replacing some of the FoxPro programs with C# programs, and who knows where that will take me. I just hope it’s closer to the CODE! For now, I’ll stay put. They’re a great group of people to work for, which makes up for the fact that I am a lone developer surrounded by absolutely no one who is even remotely like me. I actually miss the geeks. I learned a lot from my fellow coworkers, and I miss that terribly, even though sometimes they smelled funny or were difficult to talk to.