How to: Change Target Platform and Publish a Database Project

You can change the target SQL Server version for your SQL Server Data Tools (SSDT) database project to any supported instance of SQL Server (SQL Server 2005, 2008, 2008 R2, Microsoft SQL Server 2012, or SQL Azure). By doing so, you can centralize your database development in one project, but publish it to multiple SQL Server instances as the need arises.

SSDT also makes this task simple by being aware of your target platform and automatically detecting any error in your code (for example, when you're using unsupported features for a project that is going to be published to SQL Azure).

To change a project's target platform

  1. Right-click your project in Solution Explorer and select Properties. Select the Project Settings tab on the left to access the Project Settings property page.

  2. The Target platform dropdown list in this page contains all the supported SQL Server platforms that a database project can be published to. For this procedure, select SQL Azure.

To use platform validation when editing scripts

  1. Right-click the Products table in Solution Explorer, and select View Code to open it in Transact-SQL Editor.

  2. Append ON [PRIMARY] to the end of the CREATE TABLE statement.

  3. Notice that the following error shows up in the Error List pane: SQL70015: 'Filegroup reference and partitioning scheme' isn't supported in SQL Azure.

    SSDT automatically validates your script based on the target platform. In this case, since filegroup isn't supported in SQL Azure, SSDT returns an error. For a list of nonsupported Transact-SQL statements in SQL Azure, see Partially Supported Transact-SQL Statements (Microsoft Azure SQL Database).

  4. Remove the ON clause. Notice that the error immediately disappears from the Error List.

To publish a database project

  1. If you have access to a SQL Azure instance, you can skip to the next step. Otherwise, right-click the TradeDev project in Solution Explorer and select Properties to access the Project Settings property page. Use the Target platform dropdown list to select the SQL Server platform that you want to publish the project to.

  2. Right-click the TradeDev project in Solution Explorer and select Publish. SSDT will start building your project. If there's no build error, the Publish Database dialog box appears.

  3. In the Publish Database dialog box, select Edit to edit the Target database connection.

  4. In the Connection Properties dialog box, enter your SQL Server instance name and your credentials for authentication. In Connect to a database, enter NewTrade. This will attempt to publish your database project to a new database. You can also choose an existing database to publish to. For example, if you choose the existing TradeDev database, then all the changes you have been making to the objects (as scripts) in the offline TradeDev project will be propagated to the live TradeDev database.

    If you have permission to make any changes to the database you want to publish to, press the Publish button. If, however, you don't have write access to a production database, you can select the Generate Script button to produce a Transact-SQL publish script, which can then be handed off to a DBA. The DBA can then run the script to update the production server so that its schema is in sync with the database project.

  5. The Data Tools Operations window will show the progress of your publish operations, and notify you of any errors. In this new window, you can also choose to view the deployment preview, the generated script, or the full publish results if desired.

  6. You can also save the publish settings in a profile, so that you can reuse the same settings for future publish operations. To do so, select the Save Profile As button in the Publish Database dialog box. In the future, you can select the Load Profile button when you want to reload existing settings.

  7. Notice the messages in the Data Tools Operations window. Select on "View Preview" link to the right of Creating publish preview... This will open the deployment preview report. If your project's target platform isn't identical to the database server where the project is published to, SSDT will issue a warning in this report. For example, if your project's target platform is Microsoft SQL Server 2012 and you're attempting to publish the project to a SQL Server 2008 R2 server instance, you'll see the following warning in the Output window:

A project which specifies Microsoft SQL Server 2012 as the target platform may experience compatibility issues with SQL Server 2008 If such project contains entities (for example, a Sequence object) that are introduced in Microsoft SQL Server 2012, the publishing operation will fail.

The deployment will fail if object predicates use CONTAINS or FREETEXT over a newly created full-text index and transactional scripts are used. If the option to include transactional scripts is enabled during deployment, then procedures and views are defined inside a transaction while a full-text index is defined outside of a transaction at the end of the deploy script. Because of this ordering in the script, procedures or views using CONTAINS or FREETEXT won't be resolved against the full-text index, resulting in a deployment error.