SQL Server Management Studio – Changelog (version 17.5)

Download SSMS 17.5!  (If this link doesn’t work, please let me know.)

Here is Microsoft’s changelog for build number 14.0.17224.0,

What’s new

Data Discovery & Classification:

  • Added a new SQL Data Discovery & Classification feature for discovering, classifying, labeling & reporting sensitive data in your databases.
  • Auto-discovering and classifying your most sensitive data (business, financial, healthcare, PII, etc.) can play a pivotal role in your organizational information protection stature.
  • Learn more at SQL Data Discovery & Classification.

Query Editor:

  • Added support for SkipRows option to the Delimited Text External File Format for Azure SQL DW. This capability allows users to skip a specified number of rows when loading delimited text files into SQL DW. Also added the corresponding intellisense/SMO support for the FIRST_ROW keyword.


Bug fixes


  • Fixed Live Query Statistics elapsed time, to show engine execution time instead of time elapsed for LQS connection.
  • Fixed an issue where showplan was not able to recognize Apply logical operators like GbApply and InnerApply.
  • Fixed an issue related to ExchangeSpill.

Query Editor:

  • Fixed on issue related to SPIDs where SSMS could throw an error like “Input string was not in a correct format. (mscorlib)” when executing a simple query preceded by a “SET SHOWPLAN_ALL ON”.


  • Fixed an issue where SMO was not able to fetch AvailabilityReplica properties in case the server collation happened to be case-sensitive (as a result, SSMS could display an error message like “The multi-part identifier “a.delimited” could not be bound.”
  • Fixed an issue in DatabaseScopedConfigurationCollection class, where incorrectly handling collations (as a result, an SSMS running on an ma machine with a Turkish locale could display an error like “legacy cardinality estimation is not valid scoped configuration” when right clicking on a database running on a server with a case-sensitive collation).
  • Fixed an issue in JobServer class, where SMO was not able to fetch SQL Agent properties on a SQL 2005 server (as a result, SSMS was throwing an error like “Cannot assign a default value to a local variable. Must declare the scalar variable “@ServiceStartMode” and, ultimately, was not displaying the SQL Agent node in Object Explorer).


Object Explorer:


  • Fixed an issue with the Merge Audit Files feature.

Known issues

Data classification:

  • Removing a classification and then manually adding a new classification for the same column results in the old information type and sensitivity label being assigned to the column in the main view.
    Workaround: Assign the new information type and sensitivity label after the classification was added back to the main view and before saving.

Google Chrome: Fix to remove all ‘Other Search Engines’.

Found via Google Chrome: Remove all ‘Other Search Engines’ – Super User.

Finally! I’m so tired of every little site I visit adding baggage into my Chrome browser.
There really should be an option to add a site, WHEN I DESIRE TO DO SO.

Freakin’ chrome design team. Grr.

Meanwhile, there is a chrome extension that is supposed to block these silent custom search engine additions: “Don’t add custom search engines“.

Here’s to hoping it works!

C# Dependency Injection via /r/csharp

via Trying to understand something about Dependency Injection : csharp

User badlife says this:

DI is a lot deeper than you’re thinking. It’s an entirely different way of doing architecture. Here’s a simple example:

Without DI:

  • I’m a component. I need X to do some work. So I’ll create an instance of X and use it. I don’t want Y, or something that looks like X but behaves differently– I want an instance of X and only X.

With DI:

  • I’m a component. I need an instance of X to do some work
    • I’m not going to create an instance of X– I’ll let you give me one when you create me
    • I don’t care if X is really X, as long as it looks like X.
    • I don’t want Y, but if Y pretends to be X, I’ll never know. This is because I only want something that lookslike X.

Here’s an example in concrete terms:

  • The ‘component’ is something that does a calculation. As part of the calculation, it needs to call a web service to get a value (let’s say an interest rate)
  • X is usually a component that calls a web service to get the interest rate
  • Y is a testing component that just returns ‘1.0’ for the interest rate

Without DI, the component is very hard to test because it needs to call a ‘live’ web service to get an interest rate. What if that web service isn’t live? What if it isn’t accessible from the testing environment? The test could be running as part of a build, and the build server might not be able to see the web service.

With DI, both X and Y can implement a common interface. The component doesn’t actually create an instance of X– it just asks for a reference to the interface. So in a real world scenario, the system gives the component a ‘real’ instance of X by passing a reference to its interface. In a testing scenario, the system gives the component a ‘fake’ version of X (it’s actually Y!) also by passing a reference to its interface. The component doesn’t know or care about the internal implementation of what it thinks is X, and can do its work without the web service being available.

Samsung 850 Pro NVMe Driver

UPDATE 5/31/2018: I believe there are version 3.0 drivers now on Samsung’s website.

Here are the latest 64 bit drivers I could find on Samsung’s website for an 850 Pro NVMe. They (the .inf and .sys files) are from the version 2.3 installer. It may install for other SSDs as well, though I have not tested them yet. Instructions below..

The password is “nvme“. If you can’t find the download link, it is purring at you.


Hint: Past Post.


  1. Install 7zip, if you haven’t already.
  2. Make sure you have a backup of your important files.
  3. Download the cute cat picture to a temp folder.
  4. Open the image with 7zip.
  5. Save the 7z contents to the temp folder, all 3 files.
  6. Open your device manager and navigate down to “Storage controllers”.
  7. Override Microsoft’s default NVMe driver with these from Samsung.

Reboot and you should be good to go.
Benchmark before and after if you’re into that sort of stuff. 😛