Quantcast
Channel: Jamie Thomson : ssdt
Viewing all 54 articles
Browse latest View live

Day 1 – Online and offline (10 days of SSDT)

$
0
0

SQL Server Data Tools (SSDT) was released in Spring 2012 and I have been using it to build SQL Server databases nearly every day since then. In that time I’ve learnt a lot about how to make best use of the tool and I want to share that experience in a new series of blog posts called “10 days of SSDT”. I shall be publishing a different blog post every day for 10 days, each day revealing something that you may not know about SSDT. I hope you enjoy the series and contribute via the comments!

Its probably only fair to point out that this was intended to be “30 days of SSDT” but I laboured over writing the first 10 and then my second daughter turned up and since then time has been somewhat at a premium. Hence you’re getting the first 10 Smile. Hopefully one day I’ll find time to write the other 20!

SSDT is a tool to aid with developing databases. It is not intended for administering databases and hence is not intended as a replacement for SQL Server Management Studio (SSMS). Within that developer remit it supports two distinct ways of working, online and offline. Those two distinct usage scenarios are most obvious with SQL Server Object Explorer (or SSOX for short).  SSOX is a pane within Visual Studio that is made visible from from the View menu or by using the keyboard shortcut CTRL+\, CTRL+S and it looks something like this:

image

There are two top-level nodes:

  • SQL Server – For the online usage scenario. This node is a collection of SQL Server instances that can be expanded so you can examine what’s in them. I think of this node as a hybrid of the Object Explorer and Registered Servers panes in (SSMS).
  • Projects – offline projects

Online

The online usage scenario is quite simply for working with SQL Server databases that already exist. In the screenshot above notice that I have two SQL Server instances listed, (localdb)\Projects (more about that later in the series) and mhknbn2kdz.database.windows.net which just happens to be the server that hosts AdventureWorks on Azure. From here I can browse through the objects on those servers and interrogate them just as I would in SSMS. Within SSDT/SSOX however there is one important difference, when I make changes to the database I am not affecting the database directly, I am affecting an in-memory model of the database. This approach has two important advantages,

  • I can view the impact of a change (e.g. if I change a column name will it break any views that reference it) without actually making the change
  • I can make many changes to the model and then push them into my actual database en masse and SSDT will work out the best way of doing that. I don’t have to write the code that deploys my code.

Working online within Visual Studio is often referred to as connected development.

Offline

The offline usage scenario is all about writing new database “stuff” that you want to deploy. Ostensibly that doesn’t sound too different from the online scenario but the key here is that there is no requirement for a full-blown SQL Server instance to exist. In fact, you can download and install SSDT today (its free) and start building SQL Server databases without having to install SQL Server. Working offline within Visual Studio is often referred to as disconnected development.

When working offline you interact with SSOX as I previously mentioned but you will also find yourself using a pane inside Visual Studio called “Solution Explorer”. As anyone who has used Visual Studio will tell you Solution Explorer is where your code lives and that’s no different for SSDT. A solution is a collection of projects and each SSDT project pertains to a SQL Server database.

image

Any questions so far? Please put them in the comments section below.

@Jamiet

If you want to learn more about SSDT then come along to my training course Introduction to SQL Server Data Tools in association with Technitrain on 23rd/24th February 2015 in London. There is a discount if you register before the end of 2014.


Day 2 – DAC Framework (10 days of SSDT)

$
0
0

SQL Server Data Tools (SSDT) was released in Spring 2012 and I have been using it to build SQL Server databases nearly every day since then. In that time I’ve learnt a lot about how to make best use of the tool and I want to share that experience in a new series of blog posts called “10 days of SSDT”. I shall be publishing a different blog post every day for 10 days, each day revealing something that you may not know about SSDT. I hope you enjoy the series and contribute via the comments!

When you install SSDT you also install something called the Data Tier Application Framework, or DAC Framework for short (sometimes also further shortened to DacFx). You can see DacFx in your list of installed programs:

SNAGHTML1602e68b

DacFX is largely invisible to you but is vital if you are using SSDT. This is the software component that contains the smarts for deploying the code that you build using SSDT. It gets installed along with SSDT but also when you install SQL Server itself. In fact if you have ever used a dacpac (more on those later) then you have used DacFx. One important component of DacFx is a command-line tool called SqlPackage.exe which enables you to carry out many SSDT functions from the command-line mainly it allows you to deploy and manage dacpacs from the command-line.

There’s not much to know about DacFx except that it exists and what it exists for. Know though that it is a vital component of SSDT and much of the “smarts” are contained within it.

@Jamiet

If you want to learn more about SSDT then come along to my training course Introduction to SQL Server Data Tools in association with Technitrain on 23rd/24th February 2015 in London. There is a discount if you register before the end of 2014.

Earlier posts in this series:

What is a project? (10 days of SSDT – Day 3)

$
0
0

SQL Server Data Tools (SSDT) was released in Spring 2012 and I have been using it to build SQL Server databases nearly every day since then. In that time I’ve learnt a lot about how to make best use of the tool and I want to share that experience in a new series of blog posts called “10 days of SSDT”. I shall be publishing a different blog post every day for 10 days, each day revealing something that you may not know about SSDT. I hope you enjoy the series and contribute via the comments!

In Day 1 – Online and offline I explained how the offline (aka disconnected) development experience in SSDT makes use of the Solution Explorer pane inside Visual Studio. In the screenshot below I show one Visual Studio 2012 solution containing two projects, both are SSDT projects:

image

An SSDT project pertains to a SQL Server database that either already exists or you may want to create in the future. It is a container for lots of DDL statements that define all of the objects that do/will exist in that database. That’s an important point so I’ll state it again, the project contains DDL statements. It does not contain procedural code that defines how to create objects, for example you are not going to write anything like this in an SSDT project:

IF EXISTS (SELECT 1 FROM sys.tables WHERE name = 'Customer')
BEGIN
   CREATE TABLE
Customer(
      
CustomerId INT
  
,   CustomerName VARCHAR(50)
   )
  
PRINT 'Created table Customer';
END

In an SSDT project you only define DDL, so for the table defined above you only need the CREATE TABLE statement:

   CREATE TABLE Customer(
      
CustomerId INT
  
,   CustomerName VARCHAR(50)
   )

This is a very important point regarding the declarative nature of SSDT.

You are free to organise your DDL scripts within an SSDT project however you like. For a very simple database you may just want to place all your scripts under the root of the project however for something more complex you may want to come up with a folder structure that reflects how you like to organise your code, a folder per schema is a common convention. In the following screenshot you can see that I have shown both approaches:

image

Each SSDT project contains a series of properties that govern the behaviour of the SQL Server database within it. These properties are accessed by selecting a project within Solution Explorer, right-clicking and selecting properties (or press ALT+Enter), then from the resulting Properties page selecting “Database Settings”.

SNAGHTML1499a99e

As you can see here is where you should set pertinent properties of your database such as collation, various SET options, and many other things.

So in short, an SSDT project pertains to a SQL Server database and all the objects within it. Later we’ll see how SSDT turns a project into an actual database via a process called publishing. As always, if you have any questions please put them in the comments section below.

@Jamiet

If you want to learn more about SSDT then come along to my training course Introduction to SQL Server Data Tools in association with Technitrain on 23rd/24th February 2015 in London. There is a discount if you register before the end of 2014.

Earlier posts in this series:

Table designer (10 days of SSDT – Day 4)

$
0
0

SQL Server Data Tools (SSDT) was released in Spring 2012 and I have been using it to build SQL Server databases nearly every day since then. In that time I’ve learnt a lot about how to make best use of the tool and I want to share that experience in a new series of blog posts called “10 days of SSDT”. I shall be publishing a different blog post every day for 10 days, each day revealing something that you may not know about SSDT. I hope you enjoy the series and contribute via the comments!

Every database contains tables therefore not surprisingly one of the most fundamental features within SSDT is the table designer which I think of as being split into three areas, Script, Columns & Child objects:

image

Each table definition is stored as DDL in a text file with a .sql suffix however SSDT understands when a file contains a table definition and hence by opening up such a file the table designer will (by default) get displayed (you do have the option to right-click on a file and just show the raw script). The DDL for the table is shown in the script section of the table designer while the Columns and Child objects section are a graphical representation of that DDL. The significance of having a graphical UI over the script is that the two stay in sync with each other, any change you make in one will get reflected in the other. For example, if I were to check the ‘Allow Nulls’ checkbox for [Id] field the NOT NULL in the script would immediately change to NULL. If I define an index in my script then that will appear under Indexes in the Child objects section.

Its intuitive to think that the Table Designer displays DDL from only one file but actually that’s not the case, its a lot smarter than that. Take the following example where I have a table defined in one file (Product.table.sql) and the primary key for that table defined in another file (Product.PrimaryKey.sql):

image

Notice how the primary key [pkdboProduct] is still displayed in the Child objects section even though it is defined in another file. Notice also how I can choose which file the script section displays:

image

That’s the basic functionality of the Table Designer.

@Jamiet

If you want to learn more about SSDT then come along to my training course Introduction to SQL Server Data Tools in association with Technitrain on 23rd/24th February 2015 in London. There is a discount if you register before the end of 2014.

Earlier posts in this series:

Extended property support in SSDT (10 days of SSDT – Day 5)

$
0
0

SQL Server Data Tools (SSDT) was released in Spring 2012 and I have been using it to build SQL Server databases nearly every day since then. In that time I’ve learnt a lot about how to make best use of the tool and I want to share that experience in a new series of blog posts called “10 days of SSDT”. I shall be publishing a different blog post every day for 10 days, each day revealing something that you may not know about SSDT. I hope you enjoy the series and contribute via the comments!

Extended properties are a feature of SQL Server that have existed since SQL Server 2000 although I assume that you probably don’t use them as I rarely see them being used on my travels. Nonetheless extended properties are a useful way of supplying extra information about your database. Most often they are used for documentation purposes however I have also used them to drive workflow in an ETL process (e.g. I toggle the loading of a table by changing one of its extended properties). SQL Server Data Tools (SSDT) includes good support for extended properties and in this blog post I’ll cover what support it provides.

First is SSDT’s table designer. Notice in this screenshot that we have the option to choose what information is displayed per column and that “Description” is one of those chosen columns:

SNAGHTML705b570

If I enter a value into that Description for a column then check out what happens:

SNAGHTML714660f

SSDT creates the DDL that creates an extended property named MS_Description on the column in question. You can create your own extended properties as well of course but unfortunately only extended properties called MS_Description will get surfaced in the UI (and even then only for columns). If you wish to create your own then simply create them as per the code above, using GO to separate them if you have more than one defined in the same script.

One nice aspect to this support is that SSDT treats extended properties as schema rather than data hence if I change the name of the column like so:

image

then an error appears, along with a red squiggly, informing you of an invalid reference in the extended property definition. Note that refactoring is supported for extended properties so if you change the name of a referenced object using refactor rename then the extended property will get updated accordingly.

At publish time SSDT will take care of creating the extended property if it doesn’t exist or modifying it if it does, just like any other schema object. Here’s the output from publishing my project to LocalDB:

image

image

OK, that’s pretty much everything there is to know about extended property support in SSDT. Any questions? Let me know.

@Jamiet

If you want to learn more about SSDT then come along to my training course Introduction to SQL Server Data Tools in association with Technitrain on 23rd/24th February 2015 in London. There is a discount if you register before the end of 2014.

Earlier posts in this series:

SQL Server Object Explorer (10 days of SSDT - Day 6)

$
0
0

SQL Server Data Tools (SSDT) was released in Spring 2012 and I have been using it to build SQL Server databases nearly every day since then. In that time I’ve learnt a lot about how to make best use of the tool and I want to share that experience in a new series of blog posts called “10 days of SSDT”. I shall be publishing a different blog post every day for 10 days, each day revealing something that you may not know about SSDT. I hope you enjoy the series and contribute via the comments!

SQL Server Object Explorer (SSOX) is a crucial feature of SSDT and is a window that sits within SSDT’s Visual Studio shell; it is made visible from from the View menu or by using the keyboard shortcut CTRL+\, CTRL+S.

image

As a SQL Server developer that chooses to use SSDT I spend most of my time within SSOX. Think if it as a gateway to both your offline database source code and your physical deployed databases.

In Day 1 – Online and offline I said

SSDT supports two distinct ways of working, online and offline. Those two distinct usage scenarios are most obvious with SQL Server Object Explorer

This is demonstrated by the existence of two top-level nodes within SSOX, they are called:

  • SQL Server
  • Projects

You can see both in the screenshot above. The SQL Server node is a list of SQL Server instances that you have registered within SSOX (in the screenshot above I have registered one instance called “(localdb)\Projects”) which you can then expand thus allowing you to browse all the databases and server level objects upon that instance; an easy way to think of this SQL Server node is as a hybrid of the Registered Servers and Object Explorer windows in SQL Server Management Studio (SSMS). You can register any edition of SQL Server (Express through to Enterprise) and also Windows Azure SQL Database (WASD) instances too.

The Projects node of SSMS provides a logical view over SSDT projects that you have open within the Solution Explorer window, I personally am a big fan of SSDT projects (see Day 3 – What is a Projects) so this Projects node is where I spend most of my time. The screenshot below depicts the interaction between Solution Explorer and SSOX:

image

Notice there is a project in Solution Explorer called Day04 – Table Designer and there is a node under Projects within SSOX of the same name (highlighted by the red arrow). That project has two files called Product.table.sql& Product.PrimaryKey.sql, both of which are open in the centre of the screen (note that SSDT does not stipulate that filenames must reflect the name of the object defined within them, but it is useful if they do). Notice also that table [dbo].[Product] and its primary key both appear in SSOX (depicted with the blue lines) however in there they appear as you might expect them to appear in SSMS. They are displayed in a hierarchical view of the database along with appropriate icons to signify the object type (table, primary key, etc…). This is the power of the Projects node in SSOX, it provides a logical view of the objects defined in the files of the project. If you are so inclined you can even define all of your objects within a single file in Solution Explorer (note I’m not recommending you do that) and SSOX will still show the same logical view over them all.

Displaying a logical view of your databases and database projects is the basic premise of SSOX but it does have a number of other features too. For example there is a button on the SSOX toolbar labelled Group by Schema:

SNAGHTML768d76e

This changes the logical view to make Schemas a high-level node from which you can drill in to find all your database objects contained therein:

SNAGHTML765169d6

If you have a lot of schemas in your database then this can be really useful (I just wish they had an option to hide all the built-in schemas such as db_accessadmin, db_backupoperator etc…). A nice side-effect of grouping by schema is that you can right-click on one of the nodes underneath a schema in order to create a new object and the DDL script for that object will place it into the respective schema rather than the default [dbo].

SSOX has a few other features that can be launched from the right-click menu but I’ll leave investigation of those as an exercise for the reader; we have covered the main features of SSOX herein, if you have any questions please feel free to ask them in the comments section below.

@Jamiet

If you want to learn more about SSDT then come along to my training course Introduction to SQL Server Data Tools in association with Technitrain on 23rd/24th February 2015 in London. There is a discount if you register before the end of 2014.

Earlier posts in this series:

Data Tools Operations Window (10 days of SSDT – Day 7)

$
0
0

SQL Server Data Tools (SSDT) was released in Spring 2012 and I have been using it to build SQL Server databases nearly every day since then. In that time I’ve learnt a lot about how to make best use of the tool and I want to share that experience in a new series of blog posts called “10 days of SSDT”. I shall be publishing a different blog post every day for 10 days, each day revealing something that you may not know about SSDT. I hope you enjoy the series and contribute via the comments!

SSDT provides feedback on the actions that it is undertaking via the Data Tools Operations window. This is a window that sits within SSDT’s Visual Studio shell and looks something like this:

image

Whenever SSDT publishes an SSDT project (in the offline development scenario) or makes changes to an existing database (in the connected development scenario) progress will be reported in the Data Tools Operations window. For each operation reported in the Data Tools Operations window you have the ability to view:

  • Preview - A  description of the changes that SSDT is intending to make to the target database
  • Script – The T-SQL script that SSDT builds
  • Results – Essentially the output from running the aforementioned script

Here is a typical screenshot of the Preview:

image

As you can it provides a readable, pseudo-code description of what actions SSDT is going to take.

The Data Tools Operations window is a very useful addition to SSDT and its worth highlighting it in this dedicated blog post so that people are aware of its capabilities and, importantly, that it even exists.

If you want to learn more about SSDT then come along to my training course Introduction to SQL Server Data Tools in association with Technitrain on 23rd/24th February 2015 in London. There is a discount if you register before the end of 2014.

Earlier posts in this series:

Connected development (10 days of SSDT – Day 8)

$
0
0

SQL Server Data Tools (SSDT) was released in Spring 2012 and I have been using it to build SQL Server databases nearly every day since then. In that time I’ve learnt a lot about how to make best use of the tool and I want to share that experience in a new series of blog posts called “10 days of SSDT”. I shall be publishing a different blog post every day for 10 days, each day revealing something that you may not know about SSDT. I hope you enjoy the series and contribute via the comments!

In Day 1 – Online and Offline I explained how SSDT could be used to query and affect existing databases:

I can browse through the objects on those servers and interrogate them just as I would in SSMS. Within SSDT/SSOX however there is one important difference, when I make changes to the database I am not affecting the database directly, I am affecting an in-memory model of the database. This approach has two important advantages,

  • I can view the impact of a change (e.g. if I change a column name will it break any views that reference it) without actually making the change
  • I can make many changes to the model and then push them into my actual database en masse and SSDT will work out the best way of doing that. I don’t have to write the code that deploys my code.

These capabilities are worth exploring in more detail which I’ll do by comparing the schema editing experience in SSMS & SSDT. Here I show that I have a copy of venerable old Northwind which I’m going to use to demo this:

image

Let’s say, hypothetically, I want to change the name of the CustomerID field; SSMS has a UI that enables me to do this and when it does so it will alter the definition of all the affected objects such as foreign keys that reference that column. That’s quite useful however it does somewhat shield you, the developer, from knowing the intricacies of what SSMS is doing under the covers. In SSDT this scenario is a little different, we browse to the table in SQL Server Object Explorer (SSOX – its one of the integral components to SSDT) and select ‘View Designer’:

image

This launches us into SSDT’s Table Designer (which we have seen before in Day 4 – Table Designer) where we can go ahead and make our change:

image

Let’s explain what’s going on here. We’ve changed the name of a column and before we’ve actually saved our change SSDT shows us which objects will be impacted by that change. For example, the first error in that list is:

Computed Column: [dbo].[Quarterly Orders].[CustomerID] contains an unresolved reference to an object. Either the object does not exist or the reference is ambiguous because it could refer to any of the following objects: [dbo].[Customers].[CustomerID], [dbo].[Customers].[Customers]::[CustomerID] or [dbo].[Orders].[Customers]::[CustomerID].

Double clicking on that error opens up the definition of the affected object and gives us a red squiggly indicating exactly where the error is:

image

That’s two reasons why I like the SSDT way, (1) it shows you the implications of your change as you type rather than after you try and commit the change and (2) you can jump straight to affected objects so you can change them, plus you get nice red squigglies and intellisense too:

image

The third, and what I think of as the best, benefit though can’t easily be demonstrated with screenshots; that is, when I make any changes I’m not actually making changes to the physical database. In actuality SSDT has built an offline model of the database underneath the covers and it is that model to which I am making changes. I can go on making changes (probably by double clicking on all the errors in the error list) and each one of those changes is made to the offline model, not to the physical database.

Eventually I will reach a state where all the errors have been solved and I am ready to push all the model changes back to the actual database. To do that I simply hit the Update button that will appear at the top of each edited DDL script:

image

and when I do so a dialog appears with a pseudo code description of all the changes that I have made:

image

(Note that this is the same pseudo code that we talked about previously in Day 7 - Data Tools Operations Window)

I can hit the Generate Script button to build a SQL script that will make all those changes for me or simply hit Update Database to push all the changes up.

In summary, SSDT allows you to queue up a series of changes to a database by affecting an offline model rather than the database itself. If you’re making a simple change that doesn’t affect anything else then the benefit here is negligible but if your changes are more substantial than that then this can be a really useful feature.

The last note on this feature is that when SSDT was first released this feature was known as PowerBuffer although I haven’t heard that word mentioned much (if ever) since then. The only reason I mention it here is so that if you hear the word you will know what is being referred to. If you are interested there is useful PowerBuffer documentation on MSDN: How to: Update a Connected Database with Power Buffer.

@Jamiet

If you want to learn more about SSDT then come along to my training course Introduction to SQL Server Data Tools in association with Technitrain on 23rd/24th February 2015 in London. There is a discount if you register before the end of 2014.

Earlier posts in this series:


Querying a dacpac from Linqpad

$
0
0

I have been playing around with the DAC Framework over the past few days, namely the DacAPI which is a .Net API that one can use to programmatically traverse the contents of a dacpac.

image

If one prefers one can open a new C# project to start playing with the API and interrogating a dacpac but I find it a lot easier (and more fun) to use one of my favourite tools, Linqpad. Linqpad allows you to write C# code without the heavyweight ceremony of a project in Visual Studio. Stated another way, it allows you to write C# scripts rather than programs. In this post I’ll explain how to use Linqpad to interrogate a dacpac.

First of all I’ll assume you’ve downloaded Linqpad (its free), open it up and switch your query to using C# Statements

image

Press F4 to bring up the query properties where you can add references to the assemblies that you need. If you have Visual Studio 2013 installed then you’ll find the DLLs at <Visual Studio Install Dir>\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\120 (if you are using a previous version of Visual Studio or if you installed the DAC Framework in isolation then it may be somewhere else, check this forum thread for details), add them here:

image

You need to reference

  • Microsoft.SqlServer.Dac.dll
  • Microsoft.SqlServer.Dac.Extensions.dll

Switch to the Additional Namespace Imports tab and enter the following:

  • Microsoft.SqlServer.Dac
  • Microsoft.SqlServer.Dac.Model
  • System.Collections.Generic
  • System.Text

image

You’re now good to go to start writing some code. Here’s a starter for ten that dumps out a CREATE TABLE script for each table in the dacpac:

var model = new TSqlModel(@"C:dacpacs\Mydacpac.dacpac");
var allTables = model.GetObjects(DacQueryScopes.All, ModelSchema.Table);
var tableScripts = from t in allTables
                select t.GetScript();
tableScripts.Dump(); //Dump() is an extension function that simply displays the contents of the object in the Results window

image

Cool stuff. Have fun!

@Jamiet

Declarative, Model Driven Development (10 days of SSDT – day 9)

$
0
0

SQL Server Data Tools (SSDT) was released in Spring 2012 and I have been using it to build SQL Server databases nearly every day since then. In that time I’ve learnt a lot about how to make best use of the tool and I want to share that experience in a new series of blog posts called “10 days of SSDT”. I shall be publishing a different blog post every day for 10 days, each day revealing something that you may not know about SSDT. I hope you enjoy the series and contribute via the comments!

I’ve used the word “model” a few times in this series already without expanding on it too much but its worth doing because its actually fundamental to how SSDT works, a model underpins every that is done in SSDT.

In the context of SSDT a model is a representation of a database, pure and simple. In SSDT that model ostensibly exists in two places, in memory when one has an SSDT project open or one is working in connected development mode, and in a .dacpac file which gets produced when an SSDT project gets built. It may help to think of a .dacpac as a representation of the model, stored in a file. (If you want to learn more about dacpacs specifically refer to my January 2014 blog post Dacpac braindump - What is a dacpac?)

To illustrate the point if one takes a look inside a .dacpac (which is actually just a zip file with a different extension) one will notice a file called model.xml:

image

Open that up and you will see that its just a definition of lots of database objects represented as XML:

SNAGHTML8c747a6

There is an important point to make here. The model only states the definition of an object as it has been defined, it does not state how it should go about creating that object (there are no ALTER TABLE statement here for example). This notion of only defining the structure of an object, not how to create it, is known as a declarative approach to database development. One is declaring the intended state of a database, nothing else. The beauty of SSDT is that the tool can take your model and from that work out what it needs to do to get a given physical database into the same state as declared in the model. That is the fundamental underpinning of SSDT and is an important concept to grasp if one intends to use SSDT.

@Jamiet 

If you want to learn more about SSDT then come along to my training course Introduction to SQL Server Data Tools in association with Technitrain on 23rd/24th February 2015 in London. There is a discount if you apply register before the end of 2014.

Earlier posts in this series:

Code Navigation (10 days of SSDT – Day 10)

$
0
0

SQL Server Data Tools (SSDT) was released in Spring 2012 and I have been using it to build SQL Server databases nearly every day since then. In that time I’ve learnt a lot about how to make best use of the tool and I want to share that experience in a new series of blog posts called “10 days of SSDT”. I shall be publishing a different blog post every day for 10 days, each day revealing something that you may not know about SSDT. I hope you enjoy the series and contribute via the comments!

One of the aspects of T-SQL development that really grates on me is that the features of both the language and tooling are light years behind that of our brethren that write in “higher order” languages like C#, VB, Java etc… One of the tooling features that folks who live in Visual Studio take for granted is code navigation, happily that feature is now available in Visual Studio for T-SQL developers when one installs SSDT.

Be aware that SSDT’s code navigation features only work when you are working offline using SSDT projects.

There are only two keyboard shortcuts you need to learn to master code navigation (and please do use keyboard shortcuts, don’t wimp out and use the mouse):

  • F12
  • Shift+F12

Go To Definition

Go To Definition allows you to position your cursor inside a reference to an object, press F12, and SSDT will show you the definition of that object. Sounds simple, and it is, but its wonderfully useful when you get into the swing of using it. The following screenshots are an attempt to convey it.

Notice here the cursor is positioned inside a reference to a table called [datawarehouse].[DimCurrency]:

SNAGHTML1325ff31

Simply pressing F12 at that point opens the definition of that table:

SNAGHTML1327b945

Find All References

Find All References does the opposite of Go To Definition, it shows everywhere that an object is referenced. If you’ve ever been afraid to remove an object from a database because you didn’t know what was using it (let’s face it, we’ve all been there) then this feature can be a lifesaver.

Take the previous example of table [datawarehouse].[DimCurrency]. If I again position the cursor inside a reference to that object and this time press Shift+F12 SSDT will search through my database model and present a list of all the objects where it is referred to:

SNAGHTML13318b6e

In the screenshot immediately above we see that this table is referred to 51 times. Those references may be in stored procedures, views, functions, triggers, constraints or extended properties. Double-clicking on any of the entries in that list takes you directly to the definition of the referring object.

Summary

That really is it. Two very simple features but ones which can have a massively positive effect on your productivity.

Hopefully this goes without saying but code navigation does not work if you are referencing objects using dynamic SQL, this is because SSDT sees that dynamic SQL string as just that, a string, rather than a reference to another object in the model. Probably just bear that in mind.

Code navigation is top of the list of features that drive my preference for developing in offline SSDT rather than online in SSMS.

@Jamiet 

If you want to learn more about SSDT then come along to my training course Introduction to SQL Server Data Tools in association with Technitrain on 23rd/24th February 2015 in London. There is a discount if you register before the end of 2014.

Earlier posts in this series:

An appeal for SSDT developers – Red Gate want to hear from you

$
0
0

I've been contacted by Filippa Vajda from Red Gate Software who wants me to pass on the following:

I’m a UX Specialist at Red Gate, working on a plugin for Visual Studio.

I need some help in finding some people for some SSDT research. We really need to speak to some SSDT users to have a 30 minute – 1 hour max. chat on a few things we’ll be working on.

I was wondering if you’d be able to either point me at some people to contact, or put some sort of appeal on your blog for any SSDT users interested in helping us out and getting a £25 or $/euro equivalent as a thank you?

Hence this blog post. If you’d like to speak to Filippa then simply reply to this blog post with some contact details and I’m sure Filippa will be in touch. Hopefully the opportunity to provide feedback on a future product should be incentive enough, if not the 25 notes isn’t to be sniffed at.

@Jamiet

Learn from me about SSDT in London, February 2015

$
0
0

Microsoft released SQL Server Data Tools (SSDT) along with SQL Server 2012 in the Spring of 2012. Since then I’ve noticed an upward tick in both the number of organisations that are using SSDT and the number of questions that are getting asked about it on forums. There is some confusion about what SSDT actually is (Microsoft hasn’t helped there), why people should be using SSDT and, most importantly, how to make best use of it. If you want to know more then a good place to start is my blog series 10 days of SSDT or Get to Know SQL Server 2012's SQL Server Data Tools on devproconnections.com.

Its clear that people want to learn more about SSDT so if those articles don’t satiate you know that I have joined forces with Technitrain to offer a 2–day training course, in London, in February 2015 called Introduction to SQL Server Data Tools

image 

image

The course will cover:

Day 1

  • SSDT Positioning
  • IDE Tour
  • Connected Database Development
  • Declarative, offline, database development
  • Publishing
  • Continuous Integration (CI) and Continuous Deployment

Day 2

  • Data Publishing
  • Refactoring
  • Database unit testing
  • References and composite projects
  • Database Drift
  • Code analysis

If this sounds like your bag then please sign up on the Technitrain website. I ran this course for Technitrain in March 2014 after which 100% rated the trainer and the course content as outstanding. 100% also rated the course overall as outstanding.

@Jamiet

Response to “SSDT limitations”

$
0
0

A commenter on my blog post Considerations when starting a new SSDT database project asked me to comment on his blog post SSDT Limitations. i wrote a response but when I tried to post it I got told it was too long:

image

so I’m posting my response here instead. I’d suggest taking a read of the commenter’s post before reading on.


"SSDT does not handle multiple file groups"
I haven't experienced this. I'm pretty sure I've used SSDT to deploy multiple filegroups. Can you clarify what is meant by "does not handle"?

"SSDT wants to control everything"
I'd restate that as "SSDT gives you the option to control everything". If you don't want to put all your database objects into your SSDT project, then don't.

"Production will not look like UAT. For SSDT, everything looks the same."
Yes, this is a problem. SSDT espouses a mantra of "build once, deploy anywhere" but this breaks down if you want something to be different on each environment - security is the obvious thing here. My approach is to specify roles in the database project that have permissions assigned to them and then later (perhaps in a post-deployment script) add users into those roles. I describe this more fully here: A strategy for managing security for different environments using the Database Development Tools in Visual Studio 2010

"This means storing in version control production:
-Logins & passwords
-app role passwords
"
If you're storing passwords in source control then that must mean you're using SQL authentication instead of Windows authentication - that's your decision and I don't see how that is a shortcoming of SSDT. If you don't want to store them in source control - don't. SSDT has mechanisms that allow you to specify values at deployment time (search for SSDT sqlcmd variables). Bottom line, if you're storing passwords in source control then more fool you - nothing in SSDT forces you to do this.

"It is generally preferred to at least have the option to inspect what will be deployed"
Correct. And that is why (as you pointed out) SSDT has "the option of either publishing directly to the database or generating a script to run for the deployment."

"Unfortunately for SSDT the upgrade generates a single file. In practice this means is that if the database upgrade fails for any reason recovery is rather complex. You'll need to work out where the upgrade script failed and then what action you will take from there."
True. There are things you can do to mitigate this:
-Test your deployments on a copy of your production database first
-Do small, frequent releases rather than the big bang approach of infrequently deploying large, monolithic sets of lots of changes

"The product feels rather like a beta release, bringing even a simple project into production will expose some pretty serious limitation."
Beta release (to me) implies that it doesn't behave the way its been designed to. I put it to you that it behaves exactly the way its been designed to, it just so happens that that you don't like that behaviour. Fair enough if that's the case, you're not alone in that regard. There are other options for doing deployments if you don't like the way that SSDT espouses. Perhaps look at migrations (https://msdn.microsoft.com/en-gb/data/jj591621.aspx?f=255&MSPPError=-2147217396) or the old-fashioned method of manually writing change scripts.

"However the largest issue is more fundamental: the approach where you are expected to trust the magic box to generate a valid upgrade script."
Yes, you do have to put your trust in SSDT. If you're not happy doing so, don't do it, or just use the option to generate the deployment script and not run it. I personally am happier putting my trust in a repeatable algorithm rather than human beings who tend to be error prone. That's just me, your mileage may vary.

"It is very easy to generate scripts that will fail to upgrade the database successfully."
There are certain changes that SSDT is not easily able to cater for (e.g. adding a non-nullable column to a table that contains data) however I'm not sure that constitutes "very easy to generate failing scripts". Personally I think SSDT is better at generating working deployment scripts than a human being is because its quicker and less error prone. As I've alluded, its imperative that you test your deployments before pushing to a production database.

You asked me to comment and I have done. Clearly we have a difference of opinion about SSDT and that's OK. I hope you can find a way around your complaints because I honestly believe SSDT is the best tool out there for managing SQL Server deployments - I hope you come to the same conclusion one day.


Regards
Jamie

Viewing all 54 articles
Browse latest View live