I needed to get up to speed quickly on SQL Server for a possible contract.
Fortunately, Microsoft (which has always been brilliant at supporting developers) gives away a development version of SQL Server, branded SQL Express. All I had to do was install it and go.
Unfortunately, the "go" part wasn't as easy as I would hope. Install went without a hitch, but I had trouble getting SQL Server Management Studio connected to SQL Server Express on my machine.
SQL Server Management Studio has a "server name" field. It would be nice if it would detect my server and prefill the field, but it doesn't. Since the name of my machine is "Pelican" I tried that; it just gave me an error:
I got the same error when I tried typing "localhost" and when I tried the name of the instance SQL Server had created ("SQLExpress").
A search found plenty of other newbies getting the same error, but all the advice I found had to do with failed installs, firewalls, misconfigured networks, and other egregious errors. I knew my problem was none of those; I was just invoking the wrong magic combination.
The problem was finding the right one. The documentation and tutorials I could find didn't seem to have the information I neeeded; they looked like big time-wasters. (aside: Why does no one write concise documentation anymore? The C Programming Language by K&R was a language reference, default standard, documentation, tutorial, and style guide in 228 pages of precise, lucid prose and code. Nothing I have seen since has come close!)
Finally I did the right thing: I dove into the logs. In
C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Log\ERRORLOG
I found the line
2009-06-19 07:56:52.46 spid7s Server name is 'PELICAN\SQLEXPRESS'. This is an informational message only. No user action is required.
And there's the answer: I typed PELICAN\SQLEXPRESS as the Server Name in SQL Server Management Studio. It connected immediately.
This is what happens when people are so thoroughly steeped in the monoculture surrounding a product that they can't imagine what a newcomer needs to know. Why say "server name" in the connection dialog when you mean "instance name"? Why not document the format of the instance name in the SQLExpress readme, or during the install when the instance name is created? It wasn't a big deal for me, but I'll bet there are others who have been stymied by this.