Search code examples
tfssql-server-2012ssms-2012team-explorer

Using TFS 2010 Source Control with SQL Server 2012 SSMS to manage SQL Scripts


I have an ongoing need to manage, in TFS source control, a collection of SQL scripts organized as an SSMS solution (.ssmssln file).

I'd like to capture the "success path" for using SQL Server 2012 SSMS with TFS2010, using the appropriate MSSCCI provider and Team Explorer versions and install sequence.

I'm using the "Developer Edition" of the SQL Server products, running locally on my Win7-64 dev box, and need to access a TFS 2010 server maintained by a different group. VS2012 and VS2013 are also installed on this "new" dev box and I have had no problems accessing our TFS 2010 server from them.

I had been trying to get SSMS from SQL Server 2012 (Developer Edition) to work with our TFS Server 2010 for some time, with no luck. I finally did get the SSMS 2012/TFS 2010 combination to work on the new dev box, but was left with the question "what was it that actually worked", and none of the other documented solutions address this combination. This one doesn't: See: SQL Server Scripts 2012 Project into Team Foundation Server 2012, which addresses SSMS 2012 and TFS 2012.

My company's TFS versions tend to lag 1 major version behind our VS and SQL versions.

Other articles did not have steps that solved my problem. https://dba.stackexchange.com/questions/17850/tfs2010-for-ssms-2012; the 2010 Team Explorer plus 2012 MSSCCI provider did not work for the SSMS 2012 + TFS 2010 combination. This article, http://www.techtree.co.uk/sql-server/management-studio-ssms/use-team-foundation-server-tfs-as-your-source-control-in-ssms/, while helpful, didn't really discuss the Team Explorer requirement except briefly in comments from others.

I had the SSMS 2008R2 and TFS2010 combination working fine on an older box using the MSSCCI provider. When I moved to a new box, installed SSMS from SQL Server 2012, and would open and edit my SSMS solutions (opening the .ssmssln files) I was not having any luck in getting integrated TFS source control to work, despite trying a number of different MSSCCI provider versions and TFS Team Explorer versions.

From SSMS2012, I would get the "Connect to a Team Foundation Server" dialog box, with an empty dropdown list of TFS servers, and then attempt to add my company's server, and inevitably get a 404 error, despite entering the same values that worked for SSMS 2008R2/TFS2010 on my older Win7-64 box.

The combination that I believe finally worked for me was:

  1. Install Team Explorer for Visual Studio 2012 http://www.microsoft.com/en-gb/download/details.aspx?id=30656

  2. Install MSSCCI Provider for Team Foundation Server 2010 https://visualstudiogallery.msdn.microsoft.com/bce06506-be38-47a1-9f29-d3937d3d88d6

After doing these two things, I recall getting a prompt to open Team Explorer. I believe it was launched for me either after installing the MSSCCI 2010 provider or when I went to configure source control in SSMS 2012.

Interestingly, when Team Explorer launched, it showed "the Visual Studio 2010 logo." In any case, I opened it, and went to add the TFS servers. This time, there was an additional entry in the add servers box, that showed the TFS "initial path" (or "instance name") for our TFS 2010 server.

Our TFS server address appears to be: http://OurTFSServer:8080/tfs

Previously, there had been no place to enter the "/tfs" part of it. This time, it showed up in the add TFS server address dialog box, and I believe was prepopulated for me.

It appears to me that the missing part was the install of the VS2012 Team Explorer, which seems to know about the "/tfs" initial path, where the VS2010 Team Explorer did not. Strangely, the Team Explorer that launched showed the VS2010 logo; note that I explicitly uninstalled the VS2010 Team Explorer prior to the sequence of installing VS2012 Team Explorer and then installing the TFS 2010 MSSCCI Provider.

Just to keep things interesting, the MSSCI provider version numbers and dates are confusing. Here is what the "readme.txt" file says for the MSSCCI version numbers. The file is located at:

Program Files (x86)\Microsoft Team Foundation MSSCCI Provider\readme.txt

NEW system:

Microsoft Team Foundation Server MSSCCI Provider
v 3.5                          09/20/2013

OLD system:

Microsoft Team Foundation Server MSSCCI Provider
v 4.0                          03/07/2012

So it appears the combination that was working on my "old" dev box for SSMS 2008R2 and TFS2010 was the Team Explorer for Visual Studio 2010, and the MSSCCI Provider for Team Foundation Server 2012. I also had VS2010, VS2012, and VS2013 installed on that box.

On the "new" box, it appears the working combination for SSMS 2012 and TFS2010 is Team Explorer for Visual Studio 2012, and the MSSCCI Provider for Team Foundation Server 2010 (which has an older version number but a newer build/release date, compared to the 2012 MSSCCI provider).

What I am looking for is others who use this combination, SSMS 2012, and TFS 2010, to confirm and/or clarify the "success path" of what is required and the sequence, based on their experience from ACTUALLY GETTING THIS COMBINATION TO WORK. Not what "should" work (and often doesn't), but what DID.


Solution

  • This problem was resolved on several fronts, over time, by migrating to better-fit technologies, and updating to known-compatible versions of the Microsoft technologies involved.

    1) I changed most of the SQL script content to JSON files, by serializing the data with Newtonsoft's JSON.NET. Now I no longer had a need to maintain these SQL scripts. Instead, I load the data from JSON files, to objects, having implemented serialize/deserialize approaches within the applications that use the data. This works out way better than SQL since the bulk of the data that was being kept involved representations of "content".

    The content is represented as packets of documents, with each packet containing multiple document templates, and each template being comprised of multiple paragraphs. There are additional properties of packets, templates, and paragraphs up and down the object model. So JSON serialization/deserialization was a way better fit for these applications. It also enabled a "single piece flow" approach to updating content. Now I manage JSON files instead of SQL scripts, to keep point-in-time snapshots of these content objects. Typically I will back up the prior version of all the document packet objects as part of each content release, and store that backup in TFS.

    2) There were other areas where I still need to maintain SQL scripts, such as reusable queries within the application. (I didn't want to use stored procedures for configuration flexibility reasons) I found an approach for making these SQL queries part of a .NET assembly via Resource Files and that addressed the need. One example of the type of approach I used is here: https://jopinblog.wordpress.com/2007/11/12/embedded-resource-queries-or-how-to-manage-sql-code-in-your-net-projects/

    3) My company upgraded our TFS Server to TFS 2012 and we started using Visual Studio 2012 and 2013. The things that had been problems in SSMS started working when using newer known compatible configurations.