#SQLSATATL simply rocked…

May 20th, 2013 by Stuart Ainsworth

sqlsatatlSo, last Saturday, I went to the first SQL Saturday in Atlanta that I had absolutely no responsibility on the actual day of the event.  I wasn’t an organizer, I didn’t really even volunteer.  As a chapter leader for AtlantaMDF, I do have to go in and pay the bills later this week, but for the most part, I got to walk around and revel in the day. 

And it was a good day.  The team (led by Geoff Hiten) pulled off another great event; 555 people attended the event, and there were some AWESOME sessions throughout the day.  I was in the 9 am slot, and my session on Biggish Data went well, even if (as usual) I had WAY too many slides.  Speaking of slides, you should be able to download the deck from the SQLSaturday 220 schedule (as well as many other great presentations).  I did have to slip out early since this weekend was my weekend with the kids.  My current youngest (Grace) had to get service hours for beta club, so she got to hang out with me, but I needed to get back home early to hang out with the oldest one.

So what was cool?  What did I learn?

  1. The number one highlight for me was watching Louis Davidson demo Red Gate’s SQL Monitor tool, and he chose one of my custom metrics to use in the show.  I respect Louis a lot, and it made my day.
  2. I learned that I need to cut out about 10 slides out of my presentation.
  3. I had a great conversation with a few people about table partitioning and performance gains; I think there’s enough material for a future session explaining why you will or won’t see performance benefits from partitioning.  Hmmmm….
  4. I had another excellent conversation with Robert Cain regarding the growth of SQLSaturday’s, and bounced around a few ideas about moving to a mid-tier model.  Kind of like what SQLRally was supposed to become, but different. 
  5. I also got to hang out with Andy Leonard.   He and my Grace had a good time discussing movies (Where’s my super suit?).

Mostly, I just got jazzed about being back in the #sqlfamily.  Hopefully, I can build off that momentum, and start blogging again.   Granted, the next few months are going to be personally interesting, but I need to make time to share again.

Last Weeks Top “Reading” Links #33

May 20th, 2013 by Jason Strate

2012-01-013For those that follow me on twitter (@StrateSQL), you’ll know that throughout the day I tweet out some links of things I find interesting.  These tweets include “Reading” in the message and are items I’ve read over the past few days, usually after hours when sharing would be less than useful, and spaced out to avoid spamming.  The content of the links usually pertain to SQL Server, technology, and career topics; which I think others would find useful.

Most Popular Link

The most popular link that I sent out this week doesn’t have the most safe-for-work content.  It’s basically a couple with a restaurant in Arizona that decided to take on the internet after a poor reception on some reality show they were on.  It was something like, “your restaurant sucks, let me show everybody what morons you are” – that’s not the name of the show, but it sums it up nicely.  Anyways, they take on the internet, and low-and-behold, the internet wins.

 

Last week’s top 11! “Reading” Links

Along with the top link, here are the top twenty items relating to SQL Server, technology and careers that were sent out last week.  I had planned for a top 10, but number 11 is a review of my indexing book – so I’ve included it and recommend you read that… then read my indexing book.

  1. Geek City: What gets logged for index rebuild operations? [52 clicks]
  2. How a Single Tweet Can Change Your Career [41 clicks]
  3. 5 SQL Server White Papers Every DBA Should Read [36 clicks]
  4. Know the Difference Between Your Data and Your Metrics [30 clicks]
  5. Consultants – Why pay more? [24 clicks]
  6. SQL Server Customer Advisory Team – SQL Server Best Practices [19 clicks]
  7. Why CONTROL SERVER Doesn’t Cut It [15 clicks]
  8. Introducing our latest SQL Server 2008 Microsoft Certified Master – Wayne Sheffield [15 clicks]
  9. Doing Your Job [14 clicks]
  10. Distinct Aggregation Considered Harmful [14 clicks]
  11. Book review: Expert Performance Indexing for SQL Server 2012 [13 clicks]

Other Stuff Shared

Of course, no week would be complete without a few off-topic links.  These have nothing to do with technology or your career, but they sure are entertaining and interesting (and a couple are pretty gross).

  1. This Is The Most Epic Brand Meltdown On Facebook Ever [112 clicks]
  2. 9 Incredible Objects That Prove 3D Printers Are Totally Worth it [27 clicks]
  3. 6 Steps To Healing Yourself [16 clicks]
  4. DDOS on the VideoLAN downloads infrastructure [14 clicks]
  5. Thor 2 : The Dark World Trailer (2013) [12 clicks]
  6. The worst break-up stories ever [11 clicks]
  7. Timelapse: Changed Over A Few Decades via Google Earth Engine [9 clicks]
  8. Michael Bay Is Why Transformers Got So Complicated [10 clicks]
  9. Google Expected to Start a Competitor to Spotify [0 clicks]

Got something you think I should read and share, leave a comment below.  Also, if you want to see all of the links that were tweeted out last week?  Then follow the links on my tumblr blog or subscribe to it’s RSS feed.

SQL Intersection Registration Open – and a $100 Off Code!

May 20th, 2013 by Brent Ozar
Today is your lucky day.

Today is your lucky day.

How would you like to go to a SQL Server conference in Las Vegas where the sessions are taught by Brent Ozar Unlimited, SQLskills, SQLServerCentral, and SQL Sentry?

Yep. Me, Jeremiah, Kendra, Kimberly Tripp, Paul Randal, Jonathan Kehayias, Erin Stellato, Steve Jones, and Aaron Bertrand. Between us, that’s 3 MCMs, 2 MCM instructors, 7 MVPs, and 2 MVP Regional Directors.

If you’re serious about learning SQL Server, this should be the very first conference on your fall priority list. Check out some of these sessions:

  • Troubleshooting SQL Servers in VMware and SANs (me)
  • Understanding Locking, Blocking, and Isolation Levels (Kimberly)
  • Understanding Logging and Recovery (Paul)
  • X-Ray Glasses for Your Indexes (Kendra)
  • Branding Yourself for a Dream Job (Steve)
  • Deadlocking for Mere Mortals (Jonathan)
  • Hadoop: The Great and Powerful (Jeremiah)
  • Making the Leap from Profiler to Extended Events (Erin)
Team building in a Boxster through canyons

Team building in a Boxster through canyons

How much would you pay for three days of awesome learning at a conference like this with top-notch speakers, all killer no filler?

You want more sessions? You’re in luck! Your registration also includes ASP.NET Intersection sessions and Visual Studio Intersection sessions for developers, SharePoint Intersection sessions for sharing pointers. If your coworkers want to attend an open-source-friendly conference focusing on JavaScript and the web, the Angle Brackets conference is happening in the same hotel at the same time, so it makes for a great company getaway.

And hey, it’s Vegas, so it’s a great team building city, like when Jeremiah and I rented cars last time and, uh, built teams. Yeah.

But wait – there’s more! Check out the pre-con workshops:

  • Accidental DBA Starter Kit (me, Jeremiah, Kendra – Pre-Con Sunday) - You’re responsible for managing SQL Servers, but you’ve never had formal training. You’re not entirely sure what’s going on inside this black box, and you need a fast education on how SQL Server works. In one day, you’ll learn how to make your SQL Server faster and more reliable. You’ll leave armed with free scripts to help you find health problems and bottlenecks, a digital set of posters that explains how SQL Server works, and an e-book that will keep your lessons moving forward over the next 6-12 months.
  • Queries Gone Wild: Real-World Solutions (Kimberly – Pre-Con Sunday) - Have you ever wondered why SQL Server did what it did to process your query? Have you wondered if it could have done better? And, if so, how? Transact-SQL was designed to be a declarative language that details what data you need, but without any information about how SQL Server should go about getting it. Join order, predicate analysis – how does SQL Server decide the order or when to evaluate a predicate? Most of the time SQL Server gets the data quickly but sometimes what SQL Server does just doesn’t seem to make sense. Inevitably you’ll encounter certain workloads and queries that just aren’t performing as well as you expect. There are numerous reasons why query performance can suffer and in this full-day workshop Kimberly will cover a number of critical areas while showing you how to analyze a variety of query plans throughout the day.
  • Scale Up or Scale Out: When NOLOCK Isn’t Enough (me, Jeremiah, Kendra – Post-Con Thursday) - Partitioning, replication, caching, sharding, AlwaysOn Availability Groups, Enterprise Edition, bigger boxes, or good old NOLOCK? You need to handle more data and deliver faster queries, but the options are confusing. In this full-day workshop, Brent, Kendra, and Jeremiah will share the techniques they use to speed up SQL Server environments both by scaling up and scaling out. We’ll share what features might save you hundreds of development hours, what features have been a struggle to implement, and how you can tell the difference. This workshop is for developers and DBAs who need to plan long term changes to their environment.
  • Practical Disaster Recovery Techniques (Paul – Post-Con Thursday) - Disasters happen – plain and simple. When disaster strikes a database you’re responsible for, can you recover within the down-time and/or data-loss limits your company requires? What if your plan doesn’t work? This workshop isn’t about how to achieve high-availability, it’s about how to prevent or overcome the obstacles you’re likely to hit when trying to recover from a disaster – such as not having the right backups, not having valid backups, or not having any backups! In this demo-heavy workshop, you’ll learn a ton of practical tips, tricks, and techniques learned from 15 years of experience helping customers plan for and recover from disasters, including less frequently seen problems and more advanced techniques. All attendees will also receive a set of lab scenarios for further study and practice after the class with assistance from Paul.
Ernie takes in Hoover Dam

Ernie takes in Hoover Dam

Now how much would you pay for all this? Three thousand? Four thousand? Ten thousand? BUT WAIT, THERE’S MORE!

For $1,894 before June 24th, you can get the Show Package: the conference, PLUS a pre-con or post-con of your choice, PLUS your choice of a Surface RT, Xbox, or a $300 gift card.

For $2,294, you get all that plus ANOTHER pre-con or post-con – five days of nonstop learning from the absolute best in the business.

No? You want more? Okay, you drive a hard bargain, buddy. Use discount code OZAR and you get another $100 off. Register now. Operators are standing by.

...
Just check the boxes to see Bad DBA Job Detector, Top 3 Indexing Mistakes, and the Accidental DBA's 6 Month Training Plan.

Identifying Identity Columns Approaching Their Limit

May 20th, 2013 by Shaun Stuart

Back in December, a couple of checks I wrote were included in Brent Ozar Unlimited's sp_Blitz script. I was chagrined to see that some people discovered some bugs in my code and submitted fixes. To be fair, one was a bug in SQL 2008 & 2008 R2 where DBCC DBINFO WITH TABLERESULTS returned the dbccLastKnownGood entry twice. (Microsoft has said they aren't going to fix this, unfortunately.) The other was an issue when systems were using the British date format. I guess this just goes to show how hard it is to test every possible use case to discover bugs.

Even though there were only problems with one of the three tests I submitted, I still felt the need to redeem myself and submit another check. I had recently read a blog post about monitoring the values of identity columns in tables to make sure you aren't approaching the maximum value for the data type used. Surprisingly, such a check wasn't already in sp_Blitz. I felt this was something I could tackle.

My first attempt worked, but it did so by cycling through all the tables in a database, finding any identity columns, and comparing the maximum value used to the maximum value the data type can accommodate (255 for TINYINT, 2147483648 for INT, etc.) I submitted this and the feedback from Brent was that he wasn't sure if this should be included because of the performance implications. Although I tested the code on all my servers without issue, Brent mentioned that some databases, especially those for SAP, may have 10,000 to 50,000 tables. Running code to look at each of those tables could have a severe impact on performance or, at the very least, greatly increase the time it took the script to complete. That's a valid point (and again goes to show how hard it is to test for all use cases). Apparently, he spoke to Kendra Little about this and she brought up a system table that both Brent and I didn't know about (or more likely, knew about, but forgot): sys.identity_columns. Using that, I can get the same information by querying one system table instead of each individual user table in the database.

So I re-wrote my script to use that and re-submitted it to sp_Blitz. It's in the queue for evaluation, so I don't know when (or if) it will be included, but I thought I post the test here. (And of course, once I had the name of this table, I discovered a Google search returns lots of scripts that provide the same functionality.)

A quick note: The script assumes the identity increment is positive and the identity values are positive. The script will issue a warning when the maximum value is more than 90% of the maximum value of the data type used.

  DECLARE @SchemaName sysname
  DECLARE @TableName sysname
  DECLARE @ColumnName sysname

  DECLARE @Name sysname
  DECLARE DBNameCursor CURSOR
  FOR
          SELECT    name
          FROM      sys.databases
          WHERE     source_database_id IS NULL	/* no database snapshots */
                    AND is_read_only = 0		/* no read-only dbs (log shipping) */
                    AND database_id <> 2		/* skip tempdb */
                    AND state = 0	/* online databases */
          ORDER BY  name;

  CREATE TABLE #IdentityCheck
         (
          PK INT IDENTITY(1, 1)
         ,DatabaseName sysname
         ,SchemaName sysname
         ,TableName sysname
         ,ColumnName sysname
         ,ColumnType VARCHAR(8)
         ,MaxValue BIGINT
         )

  OPEN DBNameCursor
  FETCH NEXT FROM DBNameCursor INTO @Name
  WHILE @@fetch_status = 0
        BEGIN

              EXEC('USE [' + @Name + '];  INSERT  INTO #IdentityCheck
              SELECT ''' + @Name + ''' as DatabaseName
              ,SCHEMA_NAME(o.SCHEMA_ID) AS SchemaName
              ,OBJECT_NAME(o.OBJECT_ID) AS TableName
              ,c.[name] AS ColumnName
              ,t.name AS ColumnType
              ,CAST(last_value AS bigint) AS MaxValue
              FROM    sys.identity_columns c
              ,sys.types t
              ,sys.objects o
              WHERE   c.is_identity = 1
              AND t.system_type_id = c.system_type_id
              AND o.object_id = c.object_id
              AND o.type = ''u''
              AND t.is_user_defined = 0 /* only look at system defined types */
              AND t.name IN (''int'', ''bigint'', ''smallint'', ''tinyint'')')
              FETCH NEXT FROM DBNameCursor INTO @Name
        END

  CLOSE DBNameCursor
  DEALLOCATE DBNameCursor

  SELECT    'Table [' + SchemaName + '].[' + TableName + '], column ['
            + ColumnName + '] in database [' + DatabaseName
            + '] is an identity column that has reached over 90% of the maximum value for that datatype.' AS Details
           ,'' AS ChangeRequirements
  FROM      #IdentityCheck
  WHERE     1 = CASE WHEN ColumnType = 'bigint'
                          AND (CONVERT(DECIMAL(19, 0), MaxValue)
                               / 9223372036854775807.0) > .90 THEN 1
                     WHEN ColumnType = 'int'
                          AND (CONVERT(DECIMAL(10, 0), MaxValue)
                               / 2147483648.0) > .90 THEN 1
                     WHEN ColumnType = 'smallint'
                          AND (CONVERT(DECIMAL(5, 0), MaxValue) / 32767.0) > .90
                     THEN 1
                     WHEN ColumnType = 'tinyint'
                          AND (CONVERT(DECIMAL(3, 0), MaxValue) / 255.0) > .90
                     THEN 1
                END

  DROP TABLE #IdentityCheck

So what do you do if you get this warning? Well, a quick fix that Michelle Ufford suggested, is to reseed your identity value to the lowest negative value the data type supports. For example, if your identity column is an integer, reseed the column to start at -2147483648 and increment by a positive number. (This assumes you started your initial identity value at zero and used a positive increment to begin with.)

One more note: you'll notice my script uses a cursor to cycle through the databases while many other scripts you find on the internet use ms_foreachdb. Either method works. I prefer the cursor because it's 100% supported. (For the cursors-give-sucky-performance crowd, the undocumented command uses a cursor behind the scenes anyway, so that's a moot point.) Ms_foreachdb is an unsupported command and can change at any time. There is also evidence that it can skip some databases and even completely lock up SQL 2005 servers in some situations. Given the issue I ran into above with the DBCC DBINFO command, which is also an unsupported command, and Microsoft's statement that they are not going to fix it, I am committed to not using any undocumented commands in any scripts I pan to re-use. I'll use them for any one-off work I might be doing, but for something that I want to save and re-use as part of my SQL toolkit, I will pass.

Share

Per Member Per Month Per 1000 Calculations in MDX

May 20th, 2013 by MikeDavisSQL

In a lot of industries there is a popular calculation called “Per Member Per Month Per 1000” calculation or the “Per Customer Per Month Per 1000” calculation. This is used to determine the level at which the company is rendering services compared to the number of company customers. This calculation is sometimes called the 1000pmpm calculation for short.

In this article you will be looking at the member count numbers at no lower than the month level. Here is an example of the 1000pmpm calculation. If you are looking at the year level the number of months would be 12 so it would be 12 divided by 12 which is 1. So it can be removed from the calculation at the year level. This will be important later on.

[Auth Count] x ((12 / [number of months]) x 1000) / [Member Count]

In this example you will be looking at a health care company. The main number the company wants to look at is the number of authorizations per 1000 members. The data warehouse has a fact table with all of the authorizations. There is also another fact table with the member count on it also. The Fact Authorization table also has three date columns, Admit date, Discharge Date, and Date Received. This will be important when calculating the numbers at different levels of the date Hierarchy. The Fact table also has many other dimension surrogate keys mapped to the appropriate dimensions.

The Fact Membership table has a date on it named incurred date. This date will have a relationship to all three dates on the fact authorization table. The reason for this multiple date relationships is due to the users wanting to see the differences in discharge and admit numbers.

There are several other dimensions mapped to each fact table. In this example you will ignore all other dimensions except the date dimensions. But keep in mind those other dimensions need to have relationships set up to be able to slice the numbers by those dimensions.

Here is an example of part of the membership fact table. Notice that the incurred date repeats. This is because it depends on which dimensions you slice on which member count you will get. This also needs to be summed up to the month level. After the month level it is no longer valid as a sum. This seems tricky but can be done with a calculation. The original member count measure is set to sum on the measure properties. This measure is set to hidden also because the sum is invalid over the month level.

clip_image001

To fix the summing issue you will need to create a calculation to divide up the member count by the number of month. Here is that calculation:

[Member Count]:

Case

When [Date Received].[Date Hierarchy].currentmember.level is

[Date Received].[Date Hierarchy].[Year]

Then [Measures].[Members] / 12

When [Date Received].[Date Hierarchy].currentmember.level is

[Date Received].[Date Hierarchy].[Quarter]

Then [Measures].[Members] / 3

When [Admit Date].[Date Hierarchy].currentmember.level is

[Admit Date].[Date Hierarchy].[Year]

Then [Measures].[Members] / 12

When [Admit Date].[Date Hierarchy].currentmember.level is

[Admit Date].[Date Hierarchy].[Quarter]

Then [Measures].[Members] / 3

When [Discharge Date].[Date Hierarchy].currentmember.level is

[Discharge Date].[Date Hierarchy].[Year]

Then [Measures].[Members] / 12

When [Discharge Date].[Date Hierarchy].currentmember.level is

[Discharge Date].[Date Hierarchy].[Quarter]

Then [Measures].[Members] / 3

Else

[Measures].[Members]

End

In this calculation you can see the case statement is just dividing the member count by 12 at the year level and 3 at the quarter level. The member count is not valid below the month level so this takes care of all the possibilities. You will also notice that the calculation includes all three of the date hierarchies. This ensures the calculation works in all date dimensions. This can be shown on the reports and will show the correct member count for every level in all the date dimensions. The below image is of the member numbers with just the summation and the other after the above calculation. By dividing with the number of months we get the average instead of the sum at the quarter and year level, which is what we want.

clip_image002

The next calculation is just to divide the member count by 1000. This can also be shown on the reports at all date levels.

[Member Count / 1000]:

iif([Measures].[Member Count] <= 0,

null,

[Measures].[Member Count] / 1000)

The last calculation we need to do to the member count is used in the actual calculations where you divide the measures by the member count. In this example you will use the Authorization count. But instead of multiplying every measure by a number then dividing by the member count, you can do a little math and figure out that you just divide the member count number and then use this one number for all measures.

[MemberCount / 1000 for Calcs]:

Case

When IsEmpty([Member Count / 1000])

Then Null

When [Date Received].[Date Hierarchy].currentmember.level is

[Date Received].[Date Hierarchy].[Year]

Then [Member Count / 1000]

When [Date Received].[Date Hierarchy].currentmember.level is

[Date Received].[Date Hierarchy].[Quarter]

Then [Member Count / 1000] / 4

When [Admit Date].[Date Hierarchy].currentmember.level is

[Admit Date].[Date Hierarchy].[Year]

Then [Member Count / 1000]

When [Admit Date].[Date Hierarchy].currentmember.level is

[Admit Date].[Date Hierarchy].[Quarter]

Then [Member Count / 1000] / 4

When [Discharge Date].[Date Hierarchy].currentmember.level is

[Discharge Date].[Date Hierarchy].[Year]

Then [Member Count / 1000]

When [Discharge Date].[Date Hierarchy].currentmember.level is

[Discharge Date].[Date Hierarchy].[Quarter]

Then [Member Count / 1000] / 4

Else

[Member Count / 1000] /12

End

This last calculation may be confusing. To help clarify this, take a look at the 1000pmpm calculation again:

[Auth Count] x ((12 / [number of months]) x 1000) / [Member Count]

What you are basically doing is moving the ((12 / [number of months]) to the bottom of the calculation and dividing the member number by this answer. This ensures the company can compare the number across any level. So the quarter level should be very close to the month and year level. The last calculation makes sure this happens by dividing member count by the number of quarters in a year at the quarter level. At the year level it would be 12 divided by 12, which equals 1 so no division is needed. That final else is used to get all the months.

Now you can use this final calculation to divide all the measures in the cube. The below calculation can be applied to all measures. This calculation is checking for divided by zero errors then just dividing the measure by the member number we have worked hard to get above.

iif([Measures].[Member Count / 1000] <=0,

Null,

[Measures].[Auth Count] / [MemberCount / 1000 for Calcs])

Here you can see the final results:

clip_image003

By using this method you can use this final member count number easily and save lots of unnecessary work. If you try to calculate each measure separately all of the calculations would have been massive.


SQL Server – Show/Hide Results Pane in Management Studio 2012

May 20th, 2013 by Vishal

In earlier version of SQL Server Management Studio (2005, 2008 and 2008 R2) you can show/hide results pane using keyboard shortcut Ctrl+R. This shortcut was also present in Query Analyzer (SQL Server 2000).

This shortcut is no longer available in SQL Server Management Studio 2012. In this version you need to use Ctrl+Shift+Alt+R to show/hide query results pane. Another alternative shortcuts you can use to show or hide results pane is Alt+WS and Alt+WI respectively. I find the later to be more easy to use.

If you have gotten used to using old shortcut Ctrl+R you can customize shortcuts in SQL Server Management Studio.

To change keyboard shortcut for show/hide results pane:

Step 1: Go to Tools > Options in SQL Server Management Studio:

image

Step 2: Navigate to Environment > Keyboard > Keyboard

image

Step 3: Search for Window.ShowResultsPane using Show commands containing: textbox.

image

Step 4:

(1) Select Ctrl+Shift+Alt+R (SQL Query Editor) in Shortcuts for selected command: list.
(2) Select SQL Query Editor in Use new shortcut in: list.
(3) Go to Press shortcut keys: textbox and press Ctrl+R or any other shortcut you need.
(4) Click on Assign.
(5) Click on OK to apply changes.

image

Step 5: You need to restart SQL Server Management Studio to apply these changes.

 

Note: The Window menu will still show Ctrl+Shift+Alt+R as shortcut we have only added an additional shortcut, we have not removed existing shortcut.

Hope This Helps!

Vishal

If you like this post, do like my Facebook Page -> SqlAndMe
EMail me your questions -> Vishal@SqlAndMe.com
Follow me on Twitter -> @SqlAndMe


Filed under: Management Studio, SQL Configuration, SQLServer, SQLServer 2005, SQLServer 2008, SQLServer 2008 R2, SQLServer 2012

Transition from the Military to Civilian Work Force

May 17th, 2013 by Chris Shaw

I was at SQL Saturday in Phoenix last week and had a number of sidebar discussions with a solider that is transferring out of the Army lifestyle and over to the civilian world. This is a transition that I have done before, and I recall it well. I have not thought about it much over the last 15 years or so, but I do recall the nervousness that I had when I made the jump from the Marine Corps to the workforce as I know it today. When I made the transition I was lucky enough to have the opportunity to take a class my last week in the corps to help me with the many changes I was about to experience. I debated not taking the class because I didn’t think it was going to be that different, but I sure am glad I did. So as I reflect on this experience I thought I would share a few tips that might make it a bit easier. If you have any that you think would fit well send them over to me and I will see what I can do to add them to the list.

  1. Stay away from acronyms on your resume – There is a good chance that when someone is reviewing your resume that they did not serve in the military. With this being a fact, consider how many terms you use on a day to day basis that you consider normal knowledge. If someone is vetting your resume and does not understand all the terms you are using they may disqualify you simply because they don’t understand what you are trying to relay. My tip here is find a friend or a relative who does not know the military life and have them review your resume, if you use terms such as MOS or OD duty chances are they will catch it and help you explain more.
  2. Chain of command – This was a difficult one for me. The chain of command is pretty simple to understand; even people in the civilian world use it. However, in the military I was taught that anything and everything in your life was important to your chain of command. In a time of high stress such as a situation where you are in battle and bullets are being fired at you this is completely understandable. Assume you are in a fighting position, and one of your troops had a pretty serious breakup via a “Dear John” letter. This is something you would want to know, but in the civilian world many supervisors get a little creped out when they know so much about you.
  3. Your opinion – Many think that the military is a group of young people that are trained to not have and opinion. When the commanding officer says take that hill, he does not need to hear a bunch of people arguing about the right way to do it, or if you should even try to do it. Granted, these discussions on the best way may arise. In the civilian world, most employers want to know if you think that something is not being done in the best way. The secret here is understanding the line between open discussions on the best way to do things and just doing them with no opinion at all. With that being said, it is still critical to know that as a solider you don’t always know all the information that is relevant, in the civilian world that is the often the case as well.
  4. Networking – In the military if you wanted to get the best equipment it never hurt to know someone in the supply area, well it’s true in the civilian world as well. Who you know can help you, use your contacts well, and as you make the transition understand you need to make as many contacts as you can.
  5. YES SIR – A few years ago I had interviewed someone who was coming out of the Navy, when I talked with him the answer to everything was “Yes Sir“. When the candidate spoke it was not a yell, nor a bark but very direct. It is not critical to speak in such a formal way, however respect should always be paid.
  6. Volunteer – I have heard the joke more times than I care to count, in the military you become a volunteer when everyone else steps back faster than you. I was told many times before boot camp that you should never volunteer for anything. In the civilian world, I cannot stress enough how important it is. Not only do you have the opportunity to stand out, but you have a chance to learn something new. Be the person your boss knows they can go to when the need to get something done. Be the person they can count on, the type of person you want on your team.

 

 


When the person you hire is not the person you hire

May 16th, 2013 by James Serra

This is something I just heard about recently, but then experienced it for myself.

This story was told to me: A client is looking for a contractor and contacts a staffing firm to find candidates.  The staffing firms sends a resume that looks real good.  A technical interview is done via the phone, the candidate really knows his stuff and nails the interview, and he is hired.  A few weeks later the new hire arrives and begins work.  But something does not seem right.  The contractor does not seem to be that sharp, nothing like he was during the interview.  His coding skills are not that good.  After a few weeks, the client does some digging, and it is discovered this person is not the person who did the interview!

It’s called the “bait and switch”, and the hope is the client remains unaware it is a different person.  I’m guessing sometimes they get away with this switch, but you can imagine how upset the client is when they find out they have been tricked.  It seems the staffing firm is tricked also. This happened twice, and both cases involved sponsored candidates from India.  In one of the cases there was a group of seven who all lived together and one of them was really sharp (the “ring leader”) and would do all the interviews for the other six, who were junior-level.  The resumes had the real name of the person but the experience was the ring leaders.  Also, when the junior programmers were placed at a client the ring-leader would help out the junior programmers if they were struggling on the project they were on.  And the client was none the wiser.

This then happened to me, and shows the extent some people will go to trick the client.  The client I was at did a phone interview on a candidate that I participated in.  The candidate did very well in the phone interview.  Since the client had experienced the same bait-and-switch as above, the next step in the interview process is a required a face-to-face meeting.  So they did a video interview on Skype, were we used Skype for the video and used a land-line for the voice.  Once again the candidate did very well but….it turns out, we were talking to a different person on the land-line than who was on the video!  We got suspicious when we saw how the video and voice were so out of sync, and doing some more digging turned up they were in fact different people.  The guy on the video was pretending to be the guy talking on the land-line.  Crazy!

I asked my recruiter friend about this, and he replied:

I saw it happen more often earlier in my career, not so much now (but it still does happen on rare occasions).  Detroit in particular had a ton of foreign national firms set up show here in the 90’s and when this “bait & switch” became a trend, the Big 3 put an end to it.  They’d make candidates give some form of ID (SS# or some other identifier).  There would also be harsh penalties such as removal from the vendor blanket for firms that repeatedly used this tactic.  The bait & switch is a rookie move.  The staffing world can be a greasy business – unfortunately nothing really surprises me these days.

My 2013 SQL Saturday Schedule!

May 16th, 2013 by Jen McCown

I’ve finally gotten my gear together for (what I consider) the “speaking season”. Here are the SQL Saturdays that I’m speaking at, or that I’ve submitted to, or are considering submitting to! I’ll update this list as plans solidify:

  • 5/18/2013 – Atlanta - Scheduled to speak.
  • 8/3/2013 – Baton Rouge - Submitted. Call for speakers closes 6/1/2013
  • 8/17/2013 – NYC - Considering. Call for speakers closes 6/18/2013
  • 8/24/2013 – OKC - Submitted. Call for speakers closes 6/21/2013
  • 9/14/2013 – KSC - Submitted. Call for speakers closes 7/16/2013
  • 9/28/2013 – Denver - Considering. Call for speakers closes 7/30/2013
  • 10/15/2013 – PASS SummitSubmitted. Call for speakers closed.
  • 12/7/2013 – D.C. - Considering. Call for speakers closes 10/8/2013

Let me know where you’re going to be! Maybe we’ll cross paths, shake hands, share info, sing a song…

Happy days,
Jen McCown
http://www.MidnightDBA.com/Jen

Share on TwitterShare on LinkedInShare on TumblrSubmit to StumbleUponSave on DeliciousDigg ThisSubmit to reddit

Book Review – "Windows Powershell 3.0 Step By Step" by Ed Wilson, O’Reilly Media, Inc.

May 16th, 2013 by Andy Lohn

I’ve as I’ve mentioned many times on twitter, I’ve become quite obsessed with Powershell over the last year and a half.  I recently joined the O’Reilly Blogger Review Program and here is my first review.

Book Summary

Microsoft Certified Trainer, Ed Wilson, covers all of the facets of Powershell 3.0.  Not only does he teach the reader how to use Powershell, he also teaches them to teach themselves Powershell.  The book starts with the basics and builds to expert levels on many topics in Powershell.  There is a section in the introduction on what chapters to read based on your background and ability and hopes/wants/needs for Powershell.  This helped me pick and choose what to read and focus on.  At the end of each chapter, there are exercises that really test your knowledge and drill the information into your brain.  Also, throughout the book, there are Tips and Notes that help find the important information quickly.  Finally, each chapter has a Quick Reference at the end that summarizes the main points which is extremely helpful in getting the information you need.

My Reactions

Since I got this book, I have used it as a reference everyday.  In fact, I added a snippet to my $profile to open it when I open Powershell.  I’ve seen a few videos and demonstrations of the Get-Command and Get-Member functions, but having the hands on exercises along with the the full explanations helped me finally understand how to use these – and that was in the first chapter!  I love the "Hey, Scripting Guy! Blog" and this book uses a similar approach.  It keeps things simple and builds upon the simple things.  Due to the fact that this book uses a straightforward approach and makes the finding of information very easy, I recommend it to anyone interested in learning and/or improving their Powershell skills.

I review for the O'Reilly Blogger Review Program