TIP: Open SQL Files in a Visual Studio Project Into the Same Instance of SSMS
Considering how integrated Microsoft tools usually are the result is frustrating when you tell Visual Studio to open SQL files using Sql Server Management Studio (SSMS). I really don’t like using Visual Studio to edit T-SQL files but in the past, before I discovered this tip, each SQL file I opened would open in a new instance of SSMS. Try it:
- Open a solution which contains SQL files
- Right-click any SQL file and select “Open With…”
- Click “Add”
- Browse to "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Ssms.exe" or if you’re running x64 Windows "C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Ssms.exe", then click “OK”
- Click “Set as Default” and then “OK”
Now open multiple SQL files. Each time you’ll get a different instance of SSMS opened. What a pain!
NOTE: This entire article applies to SQL 2005, just replace SSMS with SQLWB.
How do you resolve this? Repeat steps 1-3 above, but at step #4 enter the following values:
- Program Name: “explorer.exe”
- Friendly Name: “Windows Explorer”
Repeat step #5 (set as default) above and then click OK. Now, open additional files. They should all open in the same instance of SSMS.
It would seem that Visual Studio issues a command to SSMS.exe which includes the path of the file selected in the solution explorer. It is up to SSMS to check for a new instance, which it doesn’t. But when you pass the file name to explorer it gets opened up in the same instance.
If SSMS is not already open, the first file you attempt to open (not first time ever, but every time you open an SQL file from Visual Studio and SSMS isn’t open yet) SSMS will open, but your file will not. Click the file a 2nd time and it will open the file this time. Don’t ask me to explain it it just is (and I have no idea why).
The result when you tell Visual Studio that SSMS is the default editor makes sense, but I don’t get why it would be different when you tell explorer to open it. Maybe if I were a Windows developer instead of a web developer I would know the answer. But either way, now you know. Enjoy.