<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Alejandro Cobar</title>
    <description>The latest articles on DEV Community by Alejandro Cobar (@alejandrocobar).</description>
    <link>https://dev.to/alejandrocobar</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F863294%2F470de09b-c74f-4167-9e97-92db15af693a.png</url>
      <title>DEV Community: Alejandro Cobar</title>
      <link>https://dev.to/alejandrocobar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alejandrocobar"/>
    <language>en</language>
    <item>
      <title>Increasing database development productivity with SQL Complete (Part 2)</title>
      <dc:creator>Alejandro Cobar</dc:creator>
      <pubDate>Wed, 23 Nov 2022 17:01:18 +0000</pubDate>
      <link>https://dev.to/alejandrocobar/increasing-database-development-productivity-with-sql-complete-part-2-4nkd</link>
      <guid>https://dev.to/alejandrocobar/increasing-database-development-productivity-with-sql-complete-part-2-4nkd</guid>
      <description>&lt;p&gt;Moving forward with the series, in this article, I will continue with the coverage of the SQL IntelliSense tool to boost DB Devs’ productivity. If you missed Part 1 and want to catch up before diving into this one, follow this &lt;a href="https://dev.to/alejandrocobar/increasing-database-development-productivity-with-sql-complete-part-1-21bl"&gt;link&lt;/a&gt; and come back once you’re done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ways to export the data&lt;/strong&gt;&lt;br&gt;
While working with different result sets, how often have you needed to move/export the data to someplace else, regardless of the reason? I have had that need way too many times in the past, and SQL Server Management Studio lets you export the data as a .csv file right out of the box. However, when you super-charge SSMS with the &lt;a href="https://www.devart.com/dbforge/sql/sqlcomplete/"&gt;SQL IntelliSense&lt;/a&gt; tool, many context menus will now have myriad additional functionalities, so let’s look at what the tool can do for us in data exporting.&lt;/p&gt;

&lt;p&gt;When you right-click in the result set grid, you will see the following additional options:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4bGbXY2P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/42u4h2hz22oo0932srax.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4bGbXY2P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/42u4h2hz22oo0932srax.png" alt="Image description" width="880" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_V0J1bCT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zjerrwat9zwfpgyfi4t6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_V0J1bCT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zjerrwat9zwfpgyfi4t6.png" alt="Image description" width="880" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NDod1jc6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2tokrq528415c9vse726.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NDod1jc6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2tokrq528415c9vse726.png" alt="Image description" width="880" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Below XML, there are also HTML and JSON options (yes, HTML). It’s just that those didn’t cut while I was taking the screenshot.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Generate Script As&lt;/strong&gt;&lt;br&gt;
This one is very valuable to me because it can serve many purposes (depending on your particular needs, of course). As the name implies, it will generate a script based on the option that you pick, so let’s explore the very first one, which is “INSERT”:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JPcNrzoY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a5ifils0kmjydt2p09mv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JPcNrzoY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a5ifils0kmjydt2p09mv.png" alt="Image description" width="880" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For simplicity, I will choose the “To New Query Editor Window” option, and this is what I get:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hDu00h6E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fswfecmqzc07cl5bugzf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hDu00h6E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fswfecmqzc07cl5bugzf.png" alt="Image description" width="880" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I guess there’s no need to explain the script, but I’d like to mention why I see this as a big feature regardless. To make it easier for the reader’s eye, let me break it down into different points:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Backup of an individual table:&lt;/strong&gt; sometimes, when you are about to apply a data modification query, you’d like to make sure that there’s a backup of the data somewhere so that you can revert to its original state if necessary (assuming you’re past the respective commit of course). But guess what? The native backup solution from Microsoft doesn’t let you either backup or restore individual tables (and 3rd party solutions are not always an option due to highly-constrained budgets), and the other native alternatives imply way too many steps, keeping you out of the productive side of the court, unfortunately.&lt;br&gt;
However, with this solution, you can script the entire table with a couple of clicks and have it sitting there in case you need it.  Or you can immediately restore it someplace else and have a backup of your result set for immediate access.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Backup of an individual table with its table definition:&lt;/strong&gt; there’s a tiny catch with the previous point. You don’t have a table definition to swiftly put the data somewhere else and call it a day. However, I’ve found a neat workaround that can also be very practical: the “INSERT #tmpTable” option.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--61XX3Rr0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/psmkm9po3l52ay4uhako.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--61XX3Rr0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/psmkm9po3l52ay4uhako.png" alt="Image description" width="880" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You just have to remove the “#” symbol, and you’re good to go! Remember that doing this will not carry over any indexes, constraints, triggers, etc., but it is still very useful to move the data around easily.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Copy Data As&lt;/strong&gt;&lt;br&gt;
Moving to the next category, let’s explore the options that the tool has to offer:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Copy Column Names Only&lt;/strong&gt;&lt;br&gt;
This one is pretty straightforward. From the result set in the result grid, select all or a few columns and hit “Copy Column Names Only.” After that, you can paste the column names anywhere, and you’re ready. Sometimes, this is quite handy when you want to quickly identify the header of a report, in case you just copied the data without it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yzXDFgVZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x6vrcrt0ta4e2sm3k7ky.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yzXDFgVZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x6vrcrt0ta4e2sm3k7ky.png" alt="Image description" width="880" height="278"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3j-pIMGM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dq6a0u01e2mwve6al6p3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3j-pIMGM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dq6a0u01e2mwve6al6p3.png" alt="Image description" width="880" height="94"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Copy Column Names and Types&lt;/strong&gt;&lt;br&gt;
Very similar to the previous one, except that it adds the data type of each column to the mix. Perhaps you are thinking of creating an empty temp table or temp variable to work in an intermediate step of your logic, results in a very handy option to get yourself going.&lt;/p&gt;

&lt;p&gt;The real beauty of this feature shines with queries where you join two or more tables instead of going through the tables within the Object Explorer to know any column data type that you’re curious about. You can simply right-click the column(s) you want and you’re set!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YOx-wY-c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5wpg78jc2s3qc5xgh8cj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YOx-wY-c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5wpg78jc2s3qc5xgh8cj.png" alt="Image description" width="880" height="241"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--95dlc2E2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ca5ivwyaky4a2xbfskki.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--95dlc2E2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ca5ivwyaky4a2xbfskki.png" alt="Image description" width="880" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Moving forward with the rest of the options, even though it is quite obvious that it is an export of the data in CSV, XML, HTML, and JSON formats, let’s see how easy it is to do so.&lt;/p&gt;

&lt;p&gt;*All four options offer an export “To File…” and “To Clipboard.” &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SGn0C2It--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pohq7ugmifrcgeejgw58.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SGn0C2It--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pohq7ugmifrcgeejgw58.png" alt="Image description" width="880" height="255"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CSV&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--boFEyQcJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gyltwt29t0hw1m26yu3b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--boFEyQcJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gyltwt29t0hw1m26yu3b.png" alt="Image description" width="880" height="124"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;XML&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AAlUY4B9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8r5tytvu8up6w89enfpe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AAlUY4B9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8r5tytvu8up6w89enfpe.png" alt="Image description" width="880" height="150"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HTML&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---k96KQr3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/51tp2w9757h6k8atzjnb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---k96KQr3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/51tp2w9757h6k8atzjnb.png" alt="Image description" width="880" height="246"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JSON&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--R6ZeL0og--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1ep00eb7myybcnk3rnpg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R6ZeL0og--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1ep00eb7myybcnk3rnpg.png" alt="Image description" width="880" height="129"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I think it’s pretty convenient to have these export formats options right at the tip of your finger, so that you can choose the one that fits your particular needs at any given time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important Note&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I would like to remark that the data that will be exported will be exactly what you select in the result grid, so make sure to select everything if that’s what you want.&lt;/p&gt;

&lt;p&gt;After seeing all the options we get from the result grid, let’s look at what options we get if we right-click any table from Object Explorer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xuDLBzJd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/14qdb8msw1ssu2g6grqq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xuDLBzJd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/14qdb8msw1ssu2g6grqq.png" alt="Image description" width="532" height="706"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see, we have one option called “Script Table as CRUD”, so let’s see what it does.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EoZIpmVx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0uku7vzmjrcud9b96xi8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EoZIpmVx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0uku7vzmjrcud9b96xi8.png" alt="Image description" width="880" height="548"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Interestingly enough, it will generate for us the TSQL code to create 4 Stored Procedures: one for SELECT, one for INSERT, one for UPDATE, and one for DELETE. You don’t have to use them if you don’t want to, but it is nice to have if you quickly need your application to interface with your database. You can also tweak the generated TSQL to fully meet your custom needs, but the amount of code generated for you should help save a good chunk of time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final thoughts&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Even if the presented options seem like simple/trivial things, they are present in some shape/form in the day-to-day tasks of a database developer, so &lt;a href="https://www.devart.com/dbforge/sql/sqlcomplete/"&gt;SQL Autocomplete&lt;/a&gt; can help you boost your productivity in any of those areas.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;As I’ve mentioned before, the tool by itself is not going to boost your productivity right away. It requires a time investment from your end, but make no mistake about it. The return on that investment that you are making is definitely worth it. And, as we saw in this article, SQL Complete smoothens the learning curve by a mile.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stay tuned for more articles where we can see how SQL Complete can help you boost your productivity!&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>devart</category>
      <category>sqlserver</category>
      <category>dbdevelopment</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Increasing database development productivity with SQL Complete (Part 1)</title>
      <dc:creator>Alejandro Cobar</dc:creator>
      <pubDate>Tue, 11 Oct 2022 00:52:17 +0000</pubDate>
      <link>https://dev.to/alejandrocobar/increasing-database-development-productivity-with-sql-complete-part-1-21bl</link>
      <guid>https://dev.to/alejandrocobar/increasing-database-development-productivity-with-sql-complete-part-1-21bl</guid>
      <description>&lt;p&gt;In today’s game, IT professionals are expected to be highly productive and very efficient with the resources within their grasp. However, in many cases, we as database professionals are left with the bare minimum tools to fulfill our duties, which is not perfect, to say the least.&lt;br&gt;
But, what does it really mean to be productive? The definition from the web states the following: &lt;/p&gt;

&lt;p&gt;&lt;em&gt;“Productivity is a measure of how efficiently a person completes a task. We can define it as the rate at which a company or country produces goods and services (output), usually judged based on the amounts of inputs (labor, capital, energy, or other resources) used to deliver those goods and services.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;With that in mind, let’s take a look at how the &lt;a href="https://www.devart.com/dbforge/sql/sqlcomplete/"&gt;SQL IntelliSense&lt;/a&gt; tool can help us DB Developers to increase our productivity. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installation&lt;/strong&gt;&lt;br&gt;
You can go to Devart’s website to choose one of the download options for dbForge &lt;a href="https://www.devart.com/dbforge/sql/sqlcomplete/download.html"&gt;SQL Autocomplete&lt;/a&gt;. Here’s a screenshot of what you’ll see:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--w-qiriUx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wg4481tz25228nff3exa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--w-qiriUx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wg4481tz25228nff3exa.png" alt="Image description" width="880" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I recommend the first option as it’s directly the SQL Server Management Studio (SSMS) extension to get you going. The other two options are big gun installers that contain the rest of the suite if you’d like to check them out as well. But for the purposes of this article, the first option should be perfectly fine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use Cases&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Disclaimer: I’ll be using Microsoft’s &lt;a href="https://docs.microsoft.com/en-us/sql/samples/adventureworks-install-configure?view=sql-server-ver16&amp;amp;tabs=ssms"&gt;AdventureWorks&lt;/a&gt; sample database to demonstrate the capabilities of the tool.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Objects suggestions on the fly while typing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Immediately after you start typing your query, the tool will present a context menu so that you can easily spot the object you are looking for, and see the rest while you are at it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6GRGmlZZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/34xmmgspntuyjdx2p0yr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6GRGmlZZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/34xmmgspntuyjdx2p0yr.png" alt="Image description" width="880" height="463"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;But not only that. If you start clicking objects, you will see the context menu expanded to show additional relevant information for you. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lS2aF8qT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tce0oky36xiwllyzaemt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lS2aF8qT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tce0oky36xiwllyzaemt.png" alt="Image description" width="880" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This screenshot contains the information about the selected object (in this case, the &lt;em&gt;Product&lt;/em&gt; table of the &lt;em&gt;Production&lt;/em&gt; schema). You can see the list of columns, their data types, which allow NULL and which don’t, which are foreign keys referencing another table, and even an estimated row count. &lt;/p&gt;

&lt;p&gt;This is very useful because it can save you several roundtrips to the Object Explorer in SSMS, expanding the tables and figuring out what you really need from all the participating tables of the query you are crafting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A quick tip:&lt;/strong&gt; if you hit the tab after selecting the object you intend to use, this SQL IntelliSense tool will complete the statement and assign an alias for you to carry on with your query:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ddWSMSrx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/saw5z0ah0pvnw9i0tcyy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ddWSMSrx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/saw5z0ah0pvnw9i0tcyy.png" alt="Image description" width="880" height="463"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Moving forward with the elaboration of the query, if I start typing the word JOIN and hit space, another context menu will appear. However, this time it will be a jaw-dropping one that lists all the tables that you can join the table with, even with the specific fields!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rEutSlA8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r6ngu8oj03phes7iiijq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rEutSlA8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r6ngu8oj03phes7iiijq.png" alt="Image description" width="880" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Again, if you hit Tab right after picking the one you want, it will be completed for you.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yYE2QuaZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d9i3enuaaoyq6x15sths.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yYE2QuaZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d9i3enuaaoyq6x15sths.png" alt="Image description" width="880" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Information within the result grid&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Giving continuity to the example I’ve been presenting, let me go ahead and execute the query from the previous screenshot:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NGIhPesL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sgl4hvkilbizpe74bers.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NGIhPesL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sgl4hvkilbizpe74bers.png" alt="Image description" width="880" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--szvRbZ9Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rq2gdlq55qrmzxzgo89u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--szvRbZ9Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rq2gdlq55qrmzxzgo89u.png" alt="Image description" width="880" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Several things to remark here:&lt;/p&gt;

&lt;p&gt;● At the bottom of the result grid, you’ll notice a gray bar with several results (MAX, MIN, AVG, SUM, etc.).&lt;br&gt;
● When you either select a few rows of the same column or click the entire column, the true value of the feature will shine. Depending on the data type of the column and the number of rows selected, the values in the bar will change as well.&lt;br&gt;
● In my particular case, I’ve selected the entire contents of the Name column, which tells me that the longest string is 32 characters long, the shortest one has 4 characters, the amount of rows selected is 1069, and that out of those 1069 records 432 are distinct. The AVG and SUM results will start reacting as soon as you pick a column with numeric data type values.&lt;br&gt;
● To be honest, there were way too many times I needed to copy/paste the entire result set to an Excel sheet to obtain the same information SQL Complete puts right there within your sight. Awesome!  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Long strings value visualization at a glance&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;How many times have you had the need to quickly visualize the contents of a column that holds long string values? When that happens you’re pretty much forced to copy/paste the values someplace else to look at them because stretching the column all the way to the right just doesn’t cut it. However, this SQL autocomplete tool includes the &lt;strong&gt;Show Data Viewer&lt;/strong&gt; option in the result grid, so let’s see it in action.&lt;/p&gt;

&lt;p&gt;Using the same result set from my previous screenshot, let me find a string that isn’t visualized entirely to quickly demonstrate the feature. All you have to do is right-click on the result grid and pick &lt;strong&gt;Show Data Viewer&lt;/strong&gt; or press &lt;strong&gt;Crtl+Alt+D&lt;/strong&gt; on your keyboard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VshNDPMd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n3jrvo4ceqvb0nb4ic3h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VshNDPMd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n3jrvo4ceqvb0nb4ic3h.png" alt="Image description" width="880" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the new window, you can visualize your entire content, no matter how long it is. Also, at the very bottom of the window, you’ll see how many chars conform to the string.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6FDmrHKe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3vtso197g2ppface2br5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6FDmrHKe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3vtso197g2ppface2br5.png" alt="Image description" width="880" height="408"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Now, there might be cases where you store image data in your database, which are usually saved as string representations. For this particular scenario data viewer really shines.&lt;/p&gt;

&lt;p&gt;I’m going to perform a simple SELECT * from the &lt;em&gt;Production.ProductPhoto&lt;/em&gt; table, which obviously should contain image data. After that, with the Data Viewer open, I’m going to select 1 random value from one of the photos columns. This is what I see:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bz96z9iw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vghur5vs4amicgwn1b7r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bz96z9iw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vghur5vs4amicgwn1b7r.png" alt="Image description" width="880" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This feature alone will save you quite a lot of time versus any traditional method you were previously using to quickly visualize the imagery data inside your database.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final thoughts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I’ve showcased a very tiny set of awesome features that the Devart SQL autocomplete tool puts at our service. Every single feature available is definitely targeted toward helping us SQL Server DBAs to be highly productive with the daily database development tasks, so kudos to the Devart team!&lt;/p&gt;

&lt;p&gt;I’m planning to create a series of articles covering as much as possible of the entire set of features just because it is totally worth it on its own, and because I’m sure that any SQL Server database developer out there will benefit from it.&lt;/p&gt;

</description>
      <category>devart</category>
      <category>sqlserver</category>
      <category>dbdevelopment</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Checking out dbForge’s SQL Complete for SQL Server (Part 3)</title>
      <dc:creator>Alejandro Cobar</dc:creator>
      <pubDate>Wed, 06 Jul 2022 02:43:43 +0000</pubDate>
      <link>https://dev.to/alejandrocobar/checking-out-dbforges-sql-complete-for-sql-server-part-3-12j9</link>
      <guid>https://dev.to/alejandrocobar/checking-out-dbforges-sql-complete-for-sql-server-part-3-12j9</guid>
      <description>&lt;p&gt;In Part 2 of the coverage of SQL Complete for SQL Server, I continued with the review of what the tool has to offer for SQL Server database developers (&lt;a href="https://dev.to/alejandrocobar/checking-out-dbforges-sql-complete-for-sql-server-part-2-5gho"&gt;you can check it out here&lt;/a&gt;). Therefore, it is time for me to continue with the review of this awesome tool, so let’s get right into it!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Statement Expansion&lt;/strong&gt;&lt;br&gt;
Have you ever started writing a SELECT * statement only to realize that you do need to list the columns in the table(s)? Of course, before even writing your TSQL statement, you can right-click on your table in Management Studio and pick “Select Top 1000 Rows”, but what if you already went straight into typing your query?&lt;/p&gt;

&lt;p&gt;Let’s see what Statement Expansion can do for us:&lt;/p&gt;

&lt;p&gt;Here’s the query I’d like to use as an example. I’m specifying a JOIN operation on purpose to demonstrate that Management Studio can’t help you out in cases like this, but SQL Complete definitely comes to the rescue!&lt;/p&gt;

&lt;p&gt;In a typical JOIN statement, you sometimes want to know what columns are involved in the operation to choose the ones you really want to return.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5okEQktS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w7f6ijk4q8uuhbu0hvxs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5okEQktS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w7f6ijk4q8uuhbu0hvxs.png" alt="Image description" width="626" height="330"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;All you have to do is put the cursor next to the “&lt;em&gt;” and a tooltip will appear indicating that you can just press *&lt;/em&gt;&lt;em&gt;Tab&lt;/em&gt;** to do the magic.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QQEFTKHm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kws2m8qyaei8nhbfxzdo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QQEFTKHm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kws2m8qyaei8nhbfxzdo.png" alt="Image description" width="628" height="330"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Awesome stuff right!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eosmCKOm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6brkqk74kgfbajk3bsdc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eosmCKOm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6brkqk74kgfbajk3bsdc.png" alt="Image description" width="600" height="314"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SQL Code Formatting&lt;/strong&gt;&lt;br&gt;
When you are building dynamic TSQL code (whether in a Stored Procedure that will be executed frequently or an ad-hoc dynamic query) often times you want to work with it to either give maintenance to it or to perform the respective troubleshooting when a related issue is reported. Sometimes the end result is a query that is hard to work with and you have to spend time formatting it in a way that is digestible enough for you to do your work, which is precisely where &lt;a href="https://www.devart.com/dbforge/sql/sqlcomplete/"&gt;SQL Code Formatter&lt;/a&gt; shines.&lt;/p&gt;

&lt;p&gt;To demonstrate the feature, I have written a one-line query to see what exactly SQL Complete does for me.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oO6RzeEQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8oa8zkubhhtnhzc58oai.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oO6RzeEQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8oa8zkubhhtnhzc58oai.png" alt="Image description" width="880" height="265"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If I click on the “Format Document” option, this is what I end up with:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DsMqb3-X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ukirvst8f4z07z3azr82.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DsMqb3-X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ukirvst8f4z07z3azr82.png" alt="Image description" width="702" height="656"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fluOKBLA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m6mayj1kafgs93dh6wav.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fluOKBLA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m6mayj1kafgs93dh6wav.png" alt="Image description" width="438" height="434"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;I know that there are 3rd party websites that perform the exact same task, but it is something that is baked right into the tool and I find it very convenient to have right at my fingertips. Additionally, what if the server where you are executing your query doesn’t have an internet connection (which is a very common thing in a production environment)? Point for SQL Complete!&lt;/p&gt;

&lt;p&gt;On top of this, SQL Complete gives you the option to format queries inside.sql files that you might have within a specific directory. Let’s take a look at a quick example:&lt;/p&gt;

&lt;p&gt;I have created a directory called &lt;strong&gt;&lt;em&gt;Queries&lt;/em&gt;&lt;/strong&gt; in my &lt;strong&gt;&lt;em&gt;Desktop&lt;/em&gt;&lt;/strong&gt; folder.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--P0NPZiB2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m2b1m53i0izpjs1npw6q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P0NPZiB2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m2b1m53i0izpjs1npw6q.png" alt="Image description" width="880" height="434"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Both files have an unformatted TSQL statement.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GutCRfgU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xkyb1k9oe1mj3otldzzv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GutCRfgU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xkyb1k9oe1mj3otldzzv.png" alt="Image description" width="880" height="434"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;To access the feature, you click on the &lt;strong&gt;&lt;em&gt;SQL Formatter…&lt;/em&gt;&lt;/strong&gt; option within the &lt;strong&gt;&lt;em&gt;SQL Complete&lt;/em&gt;&lt;/strong&gt; option in the menu bar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--r3-avfEL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b0uxpolsxb5k9co3yyza.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--r3-avfEL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b0uxpolsxb5k9co3yyza.png" alt="Image description" width="706" height="510"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;_*I apologize for the poor DPI scaling presented in the following screenshots. It is very likely that it will display correctly when you give it a shot. _&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--y7bjVZGM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6s3d96680b606a2z27x0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--y7bjVZGM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6s3d96680b606a2z27x0.png" alt="Image description" width="780" height="608"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Rp0K0qX6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/99f9m5cta9xrf18kajgc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Rp0K0qX6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/99f9m5cta9xrf18kajgc.png" alt="Image description" width="758" height="590"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FLDRR7H1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u5e0a8uurn6pb6xssasd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FLDRR7H1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u5e0a8uurn6pb6xssasd.png" alt="Image description" width="758" height="590"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--N4mmHwap--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8s1u2vu6sjoxqzzcsvbs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--N4mmHwap--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8s1u2vu6sjoxqzzcsvbs.png" alt="Image description" width="738" height="576"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;It's a nice option to have around if you ever have the need for it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YTY1l_SD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f88c2suvwgpna7kkis4q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YTY1l_SD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f88c2suvwgpna7kkis4q.png" alt="Image description" width="880" height="449"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SQL Refactoring&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Variables Renaming&lt;/strong&gt;&lt;br&gt;
Sometimes, when you have to deal with stored procedures and/or functions that you have to refactor, a common thing that you do is rename the variables used, whether it is for best practices or to adhere to a specific naming convention within your organization. Attempting this directly through SQL Server Management Studio can be a bit inconvenient.&lt;/p&gt;

&lt;p&gt;This is a sample function I have created for demonstration purposes. Let’s suppose that I want to change the name of the variable @age to @result.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hyQv8Nol--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5i5bzdyqizjf7vq9umfm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hyQv8Nol--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5i5bzdyqizjf7vq9umfm.png" alt="Image description" width="694" height="482"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;In SQL Server Management Studio, I go to the &lt;strong&gt;&lt;em&gt;Find and Replace&lt;/em&gt;&lt;/strong&gt; option and specify that I will be replacing the word &lt;strong&gt;&lt;em&gt;age&lt;/em&gt;&lt;/strong&gt; with result (yes, I know that the inconvenience I’m about to report is easily solved by replacing the whole variable name &lt;strong&gt;&lt;em&gt;@age&lt;/em&gt;&lt;/strong&gt; instead of just the word &lt;strong&gt;&lt;em&gt;age&lt;/em&gt;&lt;/strong&gt;, but it is something that can happen to anyone).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BWJEDTrl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0ta8x91zxpwu4udwrbfa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BWJEDTrl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0ta8x91zxpwu4udwrbfa.png" alt="Image description" width="880" height="269"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;After proceeding with the replace, I can see that not only were my variables successfully changed, but it also changed the name of the function and my comment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--o0wNiqNE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tulo92f6xps95o8enuey.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--o0wNiqNE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tulo92f6xps95o8enuey.png" alt="Image description" width="880" height="318"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;To avoid this, let’s use the renaming feature provided by SQL Complete. To achieve this, simply highlight the word of the variable that you want to change (in my case, I highlight the word “age”), right-click on it and click the &lt;strong&gt;&lt;em&gt;Rename…&lt;/em&gt;&lt;/strong&gt; option.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DbkFZCBB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b7vbqkq64jtz6e5h1j47.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DbkFZCBB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b7vbqkq64jtz6e5h1j47.png" alt="Image description" width="880" height="451"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;After doing that, you can proceed with the word replacement in the word that you highlighted. Note that a dotted square will appear in all the words where the change is going to be applied and a tooltip will appear stating that you can hit &lt;strong&gt;&lt;em&gt;Enter/Tab&lt;/em&gt;&lt;/strong&gt; to complete the operation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gnqnMRa2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vgwz3pzme0cnadvu4hxd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gnqnMRa2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vgwz3pzme0cnadvu4hxd.png" alt="Image description" width="712" height="478"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;And this is the end result after proceeding with the modification. As you can see, only the matching variables were modified, and the name of my function and my comment were left intact.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LY67pX9r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gszxocw7jewsxhkdzfrv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LY67pX9r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gszxocw7jewsxhkdzfrv.png" alt="Image description" width="778" height="522"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Semicolon Insertion&lt;/strong&gt;&lt;br&gt;
I know, this sounds like an extremely trivial thing because most of us omit the use of semicolons as a statement terminator when we are writing our queries. However, based on Microsoft’s official documentation, semicolons will be required at some point in a future release of SQL Server. With that said, if such a day comes, you need to be prepared so that your applications don’t start shooting sparks all over the place.&lt;/p&gt;

&lt;p&gt;To do this, simply right-click on your query page and click the “Insert Semicolons” option and voila!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mxt3uckw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fn9l6n015ljd5bfmca29.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mxt3uckw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fn9l6n015ljd5bfmca29.png" alt="Image description" width="880" height="748"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QkpAFZsF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rys997frb863u6mpld39.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QkpAFZsF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rys997frb863u6mpld39.png" alt="Image description" width="826" height="590"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;br&gt;
● In this 3rd part, we continued to explore very useful features that can definitely improve the productivity of database developers over time. It is remarkable the amount of features that we have looked so far throughout the series, considering the fact that we have been talking about an extension for SQL Server Management Studio and not a stand-alone tool!&lt;/p&gt;

&lt;p&gt;● Given the fact that SQL Complete is stuffed with a ton of useful features, it will require a time investment for any new SQL Server developer to grasp everything the tool has to offer, but the return from that time investment is totally worth it, especially since the Devart team is constantly addressing bug fixes to have the end product as polished as possible.&lt;/p&gt;

</description>
      <category>devart</category>
      <category>sqlserver</category>
      <category>dbdevelopment</category>
      <category>database</category>
    </item>
    <item>
      <title>Checking out dbForge’s SQL Complete for SQL Server (Part 2)</title>
      <dc:creator>Alejandro Cobar</dc:creator>
      <pubDate>Wed, 06 Jul 2022 02:30:56 +0000</pubDate>
      <link>https://dev.to/alejandrocobar/checking-out-dbforges-sql-complete-for-sql-server-part-2-5gho</link>
      <guid>https://dev.to/alejandrocobar/checking-out-dbforges-sql-complete-for-sql-server-part-2-5gho</guid>
      <description>&lt;p&gt;In Part 1 of the coverage for SQL Complete for SQL Server, I gave a quick glimpse at what the tool has to offer for SQL Server database developers (&lt;a href="https://dev.to/alejandrocobar/checking-out-dbforges-sql-complete-for-sql-server-part-1-13bo"&gt;you can check it out here&lt;/a&gt;). Therefore, it is time for me to continue with the coverage of the features that didn’t make the cut in the previous article, so let’s get right into it!&lt;/p&gt;

&lt;p&gt;I’d like to take a brief pause because right after firing up SQL Server Management Studio, I got a popup window that looks like this:&lt;/p&gt;

&lt;p&gt;So I’m getting v6.11.3 before moving on with the article!&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RAaLjQmM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mkouh43o2xrjoti8fxdj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RAaLjQmM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mkouh43o2xrjoti8fxdj.png" alt="Image description" width="880" height="416"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;After clicking the “Update” button, this is what you’ll see:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tKMbzOyr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/odn35s7non5h6u603lqo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tKMbzOyr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/odn35s7non5h6u603lqo.png" alt="Image description" width="520" height="186"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;After clicking “Run Installation," SQL Server Management Studio will close and you’ll see a window like this one:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--g48joOro--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nisgqqtt01dbmdaerp8a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--g48joOro--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nisgqqtt01dbmdaerp8a.png" alt="Image description" width="880" height="660"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As part of the setup process, there’s a “Startup Optimization” step, which is a very welcome thing from the Devart team, so I suggest you enable that as well to enhance your experience with the tool:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sG1p1QWu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q0zep6kpuz54yesviy4p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sG1p1QWu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q0zep6kpuz54yesviy4p.png" alt="Image description" width="880" height="660"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cpxctks_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j0clrdee0cahpcknkry1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cpxctks_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j0clrdee0cahpcknkry1.png" alt="Image description" width="880" height="660"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;As a quick side note, here are the release notes for SQL Complete version 6.11.3:&lt;br&gt;
&lt;em&gt;&lt;strong&gt;New features and improvements&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;●    SSMS v19 Preview 2 integration is added&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;User-reported and internal bug fixes&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;●    Fixed an application error that occurred when starting SSMS 2014&lt;br&gt;
● Fixed the display of data in Data Viewer when changing the order of columns in the Editor&lt;br&gt;
● Fixed an error that might occur when opening documents&lt;br&gt;
● Fixed an issue with displaying Quick Info on an incomplete script&lt;br&gt;
● Fixed an issue with missing hints for Linked Server objects&lt;br&gt;
● Added temporary table hints that do not depend on the selected database&lt;br&gt;
● Fixed the problem with incorrect formatting of procedure parameter names&lt;br&gt;
● Fixed an unexpected exception that might occur when copying data to the clipboard (D89130)&lt;br&gt;
● Fixed the reset of tabs color settings after closing SSMS with SQL Complete activated (D85351)&lt;br&gt;
● Fixed an issue with setting the database name in the Query Editor window when starting SSMS using the -d argument ** (D81862)&lt;br&gt;
● Fixed the disappearance of the Document Outline window (D81156)&lt;br&gt;
● Fixed an error that occurred when starting SSMS (D87321, D89325, D90091, D90192, D90396, D90381, D90374, D90368)&lt;br&gt;
● Fixed memory leak issue that occurred when executing large scripts (D89598, D90100)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Moving on with the review of the rest of the tool, here’s what you can do with it:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tabs and database colors:&lt;/strong&gt;&lt;br&gt;
When you are performing database development work and you have to work with multiple databases across different SQL Server instances, sometimes you can have a hard time recognizing right away to which environment each tab belongs. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uJfsL89g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qrlvixe09u6a6g52rd2z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uJfsL89g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qrlvixe09u6a6g52rd2z.png" alt="Image description" width="634" height="732"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;You can also create your own categories as you please, so that you can structure your workflow to your own liking.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--U7A1XvGq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h9wl0cjayu4glix1wv4t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--U7A1XvGq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h9wl0cjayu4glix1wv4t.png" alt="Image description" width="660" height="760"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FbQLUdlQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0jyvrw4281ifgxm7l0ra.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FbQLUdlQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0jyvrw4281ifgxm7l0ra.png" alt="Image description" width="740" height="538"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8bSUa3oG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3o32e50zlzp3wxrcn3sa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8bSUa3oG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3o32e50zlzp3wxrcn3sa.png" alt="Image description" width="880" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Result set grid:&lt;/strong&gt;&lt;br&gt;
The first option is a cool complementary bar at the bottom of the result set grid where you can see aggregate information about the data you manually select. Let me give you a quick example of what this is about:&lt;/p&gt;

&lt;p&gt;As you can see, I have manually selected the first 10 values of my first column, and since that’s an IDENTITY PK field, then it has consecutive INT numbers. After I select them, then I can see at the bottom that the MAX selected value is 10, the SUM of all selected is 55, and so on. The results calculated will vary by the number of values selected, which makes it the very first time I’ve seen anything like this.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mqMuBM7S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rba0lrif87utb73f6sga.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mqMuBM7S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rba0lrif87utb73f6sga.png" alt="Image description" width="712" height="1112"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Now, if you want to look for a specific string within your result set, then you can click the &lt;strong&gt;&lt;em&gt;Find&lt;/em&gt;&lt;/strong&gt; option and any match will be highlighted:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eoBNal7r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h1aqi9cpny9wsr9ab2pz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eoBNal7r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h1aqi9cpny9wsr9ab2pz.png" alt="Image description" width="880" height="449"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;The next option is called &lt;strong&gt;&lt;em&gt;Data Viewer&lt;/em&gt;&lt;/strong&gt;.  Let’s suppose that you have a table with an NVARCHAR(MAX) column and you have very long strings in there. If you right-click your result set and select the &lt;strong&gt;&lt;em&gt;Show Data Viewer&lt;/em&gt;&lt;/strong&gt; option, then you will have a new view to display the information in a more “digestible” way.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--l3e9erAq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qslunx32ptxcbdy9n8c5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--l3e9erAq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qslunx32ptxcbdy9n8c5.png" alt="Image description" width="880" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see, the view at the bottom shows the entire string, while the original view has limited visibility, and you would have to drag the size of the column all the way to the left to give it a shot. This is very handy when you have to deal with columns that store large strings.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XFfw1Vve--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i6w483omv0mzop9nqd6w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XFfw1Vve--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i6w483omv0mzop9nqd6w.png" alt="Image description" width="880" height="448"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;The Data Viewer allows you to quickly visualize image data that you might have stored in your database, which is a very cool feature on its own:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;*The following screenshot is taken from Devart’s website, for demonstration purposes.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AhPXsV1d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lc6vy8fn2nox5vmw33y9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AhPXsV1d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lc6vy8fn2nox5vmw33y9.png" alt="Image description" width="880" height="705"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next option is &lt;strong&gt;&lt;em&gt;Generate Script As&lt;/em&gt;&lt;/strong&gt;, which gives you different options to work with your result set. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uUVmoW5e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tmr27bpwz0uc71ztm8yv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uUVmoW5e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tmr27bpwz0uc71ztm8yv.png" alt="Image description" width="880" height="448"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;If I pick the INSERT option, then it will create the TSQL statement to perform the insert of my data, which is very useful if you are trying to migrate a particular database table to another place, something that SQL Server’s native backup hasn’t been able to bring to the table yet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EzVgwhtd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2wze2bl6ms8cdaajnolb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EzVgwhtd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2wze2bl6ms8cdaajnolb.png" alt="Image description" width="880" height="171"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let me show you another example with one of the other options (in this case, “INSERT #tmpTable”):&lt;/p&gt;

&lt;p&gt;I’ve selected the rows of another table that I have just to show that any of the selected options will work only against the manually selected rows, as follows:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oSLEkIen--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2x5u87hqcss37aud0o2g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oSLEkIen--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2x5u87hqcss37aud0o2g.png" alt="Image description" width="880" height="449"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--j_jeF0JK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ttw6zg89iv9pznrkhcbt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--j_jeF0JK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ttw6zg89iv9pznrkhcbt.png" alt="Image description" width="474" height="974"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The next feature I want to demonstrate is related to the export of the data. Natively, SQL Server Management Studio lets you export your data to different file formats, but it is not as straight-forward as compared to &lt;a href="https://www.devart.com/dbforge/sql/sqlcomplete/"&gt;SQL Intellisense&lt;/a&gt;. Let me show you how, with a couple of clicks, I can export my result set to a JSON file:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VYn-B4G0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ihxvhdswrv1efcfkz528.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VYn-B4G0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ihxvhdswrv1efcfkz528.png" alt="Image description" width="880" height="726"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--or_Z65i3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/njas6zei27xhyzjz12j9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--or_Z65i3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/njas6zei27xhyzjz12j9.png" alt="Image description" width="656" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--n1zpudio--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ab87r0f31m0lxndrg7or.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--n1zpudio--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ab87r0f31m0lxndrg7or.png" alt="Image description" width="880" height="481"&gt;&lt;/a&gt;   &lt;/p&gt;

&lt;p&gt;Again, the export will work on the data that you have selected in the result grid, so keep that in mind.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final thoughts&lt;/strong&gt;&lt;br&gt;
● Right after I started working on the first part of the review for this tool, I got notified that SQL Complete had a new release ready to be installed, which tells you that the Devart team is constantly polishing their suite of products so that DB developers can maximize their productivity. And not only that, the release notes specifically state that the bugfixes issued are user-reported ones, which is very cool because they definitely listen to their audience!&lt;/p&gt;

&lt;p&gt;● As you just saw in this follow-up review of SQL Complete, the tool brings to the table a variety of options to enhance the productivity of SQL Server database developers.&lt;/p&gt;

&lt;p&gt;● I’m thinking of making a Part 3 because there are options that I haven’t covered yet, but would still like to keep the format of these reviews as digestible as possible for the reader, so stay tuned!&lt;/p&gt;

</description>
      <category>devart</category>
      <category>sqlserver</category>
      <category>database</category>
      <category>dbdevelopment</category>
    </item>
    <item>
      <title>Checking out dbForge’s SQL Complete for SQL Server (Part 1)</title>
      <dc:creator>Alejandro Cobar</dc:creator>
      <pubDate>Thu, 30 Jun 2022 14:36:21 +0000</pubDate>
      <link>https://dev.to/alejandrocobar/checking-out-dbforges-sql-complete-for-sql-server-part-1-13bo</link>
      <guid>https://dev.to/alejandrocobar/checking-out-dbforges-sql-complete-for-sql-server-part-1-13bo</guid>
      <description>&lt;p&gt;&lt;strong&gt;Installation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can get dbForge SQL Complete by clicking the &lt;em&gt;&lt;strong&gt;Get Trial&lt;/strong&gt;&lt;/em&gt; button. If you go for the SQL Tools Professional Trial, it will also include the whole suite of SQL Server Management Studio extensions, which adds a whole lot of extra value.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TfR5i167--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oohqbxffepcofkhgqr7q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TfR5i167--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oohqbxffepcofkhgqr7q.png" alt="Image description" width="880" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yb5goirI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d5btnyiaifbljzwug2hl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yb5goirI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d5btnyiaifbljzwug2hl.png" alt="Image description" width="880" height="619"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; SQL Complete is an add-in for SQL Server Management Studio, so I would recommend having the latest version installed, although if you have an older version (e.g. 2012, 2014), then it will probably work as well.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Since SQL Complete is not a stand-alone tool, the first thing you must do is open SQL Server Management Studio and establish a connection against a target SQL Server instance of your choosing. Once in there, you can fire up a new query window and start laying out a query, just to see what it does:&lt;/p&gt;

&lt;p&gt;In my case, I’m currently connected to my database called “test2” which only has 1 table right now. As I’m writing my SELECT statement, you can see that SQL Complete is listing that table for me in the context menu, which is very helpful when your databases are flooded with dozens of objects.&lt;/p&gt;

&lt;p&gt;Now, if you don’t want to type the whole name of the desired table, then you can simply select it and it will complete it within your query.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4sT1sTUK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gocjg2tm8f3321q8tyh5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4sT1sTUK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gocjg2tm8f3321q8tyh5.png" alt="Image description" width="516" height="576"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;For demonstration purposes, I have created a new table called “table2” and re-tried writing the same SELECT statement again. However, this time I noticed that only “table1” was showing in the context menu; it showed only after I dropped the connection to the instance and re-established it, so that you are fully aware. As you can see in the screenshot, it is showing as expected.&lt;/p&gt;

&lt;p&gt;There’s one additional detail that I would like to bring up, and it is that if you select a particular table with the arrow keys on your keyboard, then it will list you all the fields with their respective data types. It will also tell you which fields conform the Primary Key, and an estimate of the row count. That feature by itself is a massive productivity booster for all of us SQL Server DB Developers! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bjDYXaVE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pi38kx2tkjtw1oh0xftk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bjDYXaVE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pi38kx2tkjtw1oh0xftk.png" alt="Image description" width="638" height="552"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Just out of pure curiosity, I have created a third table called “table3” with 31 fields (1 id and 30 NVARCHAR fields) just to see how SQL Complete presents a wide table:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ieMS6GCj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gyfzdruovxju6st0c81q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ieMS6GCj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gyfzdruovxju6st0c81q.png" alt="Image description" width="632" height="764"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;With my on-going curiosity, I want to try with an even wider table (61 fields) to see the behavior:&lt;/p&gt;

&lt;p&gt;It will display as much as your screen can handle. It would be neat to include a scrollable view for the context menu for cases like this though, but I’m sure that the Devart team will address it if the demand for it is high enough because they are constantly improving their suite of tools for the greater good.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;*I would like to make a tiny pause here and take back what I mentioned earlier in regards to the need to re-establish a connection to the SQL Server instance so that my newly-created table would appear in the context menu. It turned out that after I created my tables “table3 and table4”, I got up from my seat for a few minutes, and when I got back, the tables were there, without the need for me to re-establish my connection.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gCCvG828--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nx1nw04ot0pl0rg1gi03.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gCCvG828--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nx1nw04ot0pl0rg1gi03.png" alt="Image description" width="740" height="954"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Now let me move on to an INSERT statement to see what we get:&lt;/p&gt;

&lt;p&gt;Interestingly enough, here you get a scrollable view for all the fields if you have wide tables! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9b4hKpTj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2fl5sygwd1bc235bg836.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9b4hKpTj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2fl5sygwd1bc235bg836.png" alt="Image description" width="574" height="640"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NuFJ8L49--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/edfbcj21c1sdkf94pkbv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NuFJ8L49--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/edfbcj21c1sdkf94pkbv.png" alt="Image description" width="580" height="646"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;With that detail out of the way, I want you to notice that next to each field name there’s a white/unmarked checkbox, so if you start clicking them you will see how your INSERT statement is being completed for you (it’s just SQL Complete living up to its name ;) ):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uWU34McT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tfb5rwy9vs2i272faamh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uWU34McT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tfb5rwy9vs2i272faamh.png" alt="Image description" width="678" height="756"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Now, if you move on to the VALUES section of your INSERT statement and start filling in the values, then &lt;a href="https://www.devart.com/dbforge/sql/sqlcomplete/"&gt;SQL Intellisense&lt;/a&gt; will indicate which column you are specifying the value for:&lt;/p&gt;

&lt;p&gt;This visual feedback alone is worth every penny!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1ZEEyJyI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y8cqy769vet6e4togv3j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1ZEEyJyI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y8cqy769vet6e4togv3j.png" alt="Image description" width="880" height="278"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;For the UPDATE statement you pretty much get the same treatment, as you are typing it you will be getting the help from SQL Complete to write a valid statement:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--E5V9gUqF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k6ujy4fdj3q01651qd7v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--E5V9gUqF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k6ujy4fdj3q01651qd7v.png" alt="Image description" width="646" height="632"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--deDYwEGk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zmkt6pijh6obvtislt3h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--deDYwEGk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zmkt6pijh6obvtislt3h.png" alt="Image description" width="746" height="570"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Moving to the DELETE statement, as soon as I enter the word DELETE, then I’m presented with 2 options:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_BlcQ_mx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kyvliqk4zzsvbfr41wj3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_BlcQ_mx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kyvliqk4zzsvbfr41wj3.png" alt="Image description" width="880" height="750"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;If I pick the “DeleteFrom” option, you will notice that SQL Complete will layout a full skeleton for a formal DELETE statement that you simply have to accommodate to your own case:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nwmmbvJg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kvhlb7p5cg0g6ladbg5n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nwmmbvJg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kvhlb7p5cg0g6ladbg5n.png" alt="Image description" width="438" height="276"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Moving on to a SELECT with a JOIN statement, this is what I’m able to see when I reach the part where I have to specify the fields to perform the match:&lt;/p&gt;

&lt;p&gt;As you can see, it is suggesting to me that the JOIN can be done using the id fields of both tables, and it will also show the participating tables along with their respective fields.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--V-LFKwOU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6ykjklz68fevoq2yxpln.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V-LFKwOU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6ykjklz68fevoq2yxpln.png" alt="Image description" width="708" height="794"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Moving on to the last section of this article, I want to show you a feature that SQL Complete also has baked in. If you right-click on any database, you will see a section called “SQL Complete” and then an option called “Find Invalid Objects”:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eqyiSzdK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/grzuzmrwallo00mmkr6i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eqyiSzdK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/grzuzmrwallo00mmkr6i.png" alt="Image description" width="646" height="828"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;After you click that option, you will see something like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KKnY3S4g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rii70zuo8x0pmjjjja9z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KKnY3S4g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rii70zuo8x0pmjjjja9z.png" alt="Image description" width="880" height="438"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;If I hit the “Analyze” button or link, this is what I’ll get:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--b9ZxeR-_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9xqrzzkmo3uwr3gtgten.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--b9ZxeR-_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9xqrzzkmo3uwr3gtgten.png" alt="Image description" width="880" height="438"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;For this particular demonstration, I have created on purpose a Stored Procedure that is trying to do something on a table that doesn’t exist within my “test2” database, just to show you that SQL Complete will not only let me know that there’s something wrong with my Stored Procedure, but it will also pin-point where the issue is. Once again, hats off to the Devart team! &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final thoughts&lt;/strong&gt;&lt;br&gt;
● I have definitely just shown you the surface of what SQL Complete has to offer, so if you’d like to dig deeper, then I highly recommend you check the &lt;a href="https://docs.devart.com/sqlcomplete/"&gt;documentation center&lt;/a&gt; for even more information. I will continue with the coverage of SQL Complete in a second part so that the content is presented to you in a digestible format.&lt;/p&gt;

&lt;p&gt;● If your workflow revolves heavily around DB Development for SQL Server, then SQL Complete is definitely the tool to have to boost your productivity. &lt;/p&gt;

&lt;p&gt;● SQL Complete is the perfect complement, whether you are an experienced senior or a not-so-experienced junior database developer.&lt;/p&gt;

</description>
      <category>devart</category>
      <category>sqlserver</category>
      <category>dbdevelopment</category>
    </item>
    <item>
      <title>Checking out dbForge’s Decryptor for SQL Server</title>
      <dc:creator>Alejandro Cobar</dc:creator>
      <pubDate>Wed, 15 Jun 2022 15:33:54 +0000</pubDate>
      <link>https://dev.to/alejandrocobar/checking-out-dbforges-decryptor-for-sql-server-42h3</link>
      <guid>https://dev.to/alejandrocobar/checking-out-dbforges-decryptor-for-sql-server-42h3</guid>
      <description>&lt;p&gt;There’s no mystery about the fact that Microsoft takes security very seriously, and SQL Server provides several different features to protect the databases of end-users. Now, just by hearing the name “Decryptor for SQL Server” it gives the impression that somehow it must be related to a security feature, so stick around to discover what Decryptor for SQL Server can do for the professional SQL Server database administrator.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installation&lt;/strong&gt;&lt;br&gt;
You can get dbForge &lt;a href="https://www.devart.com/dbforge/sql/sqldecryptor/download.html"&gt;SQL Decryptor&lt;/a&gt; by clicking the &lt;em&gt;&lt;strong&gt;Get For Free&lt;/strong&gt;&lt;/em&gt; button. If you go for the SQL Tools Professional Trial, it will also include the whole suite of SQL Server Management Studio extensions, which adds a whole lot of extra value.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TGn6DZ5r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e20wcd49ynz4f200hywy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TGn6DZ5r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e20wcd49ynz4f200hywy.png" alt="Image description" width="880" height="498"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; Make sure you have .NET Framework 4.5.2 or higher installed.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qgFKe_0z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s473vr584yeqhi570a8u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qgFKe_0z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s473vr584yeqhi570a8u.png" alt="Image description" width="880" height="617"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;I will be showing the standalone version of the tool, so feel free to follow along either using the same version or through the SQL Server Management Studio extension.&lt;/p&gt;

&lt;p&gt;After opening the application for the first time, it will immediately detect the SQL Server instance in your server, so pick one and fill in the connection string parameters to move on. You don’t need to tick the &lt;em&gt;Dedicated Administrator Connection mode&lt;/em&gt;, I’m just showing that the option is there in case you ever need to use it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bysn3Yxf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gmfmsk405quw8zml3vda.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bysn3Yxf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gmfmsk405quw8zml3vda.png" alt="Image description" width="680" height="486"&gt;&lt;/a&gt;    &lt;/p&gt;

&lt;p&gt;Once you pick your SQL Server instance, you will see something like this:&lt;/p&gt;

&lt;p&gt;It looks a lot like SQL Server Management Studio, so I have expanded all my user databases to show you that you will see the same directory layout in all of them: Procedures, Functions, Views, DML Triggers, and DDL Triggers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UyKydjce--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/chchu69uuishv380x54n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UyKydjce--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/chchu69uuishv380x54n.png" alt="Image description" width="424" height="964"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;To see what options the tool provides, let me pick a random &lt;em&gt;Views&lt;/em&gt; directory, expand it, and see what it does after right-clicking any of the existing objects:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---UklI3nE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4r05pdtfh9wwuim1xy1g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---UklI3nE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4r05pdtfh9wwuim1xy1g.png" alt="Image description" width="442" height="854"&gt;&lt;/a&gt;   &lt;/p&gt;

&lt;p&gt;The &lt;em&gt;Connect&lt;/em&gt; and &lt;em&gt;Disconnect&lt;/em&gt; ones are pretty much obvious, so I’m going straight for the other ones. This is what you get after clicking &lt;strong&gt;Show DDL script&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FKjfzjGm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n4ogcmhauswjdhkj60f6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FKjfzjGm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n4ogcmhauswjdhkj60f6.png" alt="Image description" width="880" height="436"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;If you click the &lt;em&gt;&lt;strong&gt;Decryption Wizard&lt;/strong&gt;&lt;/em&gt; option, this is what you will see:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--e_UDhh9W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/igzqc0t9o8sdzvly49ng.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e_UDhh9W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/igzqc0t9o8sdzvly49ng.png" alt="Image description" width="880" height="436"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Let me pick a &lt;em&gt;&lt;strong&gt;File path&lt;/strong&gt;&lt;/em&gt; and hit the &lt;em&gt;&lt;strong&gt;Execute&lt;/strong&gt;&lt;/em&gt; button to see what I get:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0TqbEofr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h411eqrel444u6znrxc7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0TqbEofr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h411eqrel444u6znrxc7.png" alt="Image description" width="880" height="436"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Ok, fair enough. That’s probably why the &lt;em&gt;&lt;strong&gt;Decrypt in-place&lt;/strong&gt;&lt;/em&gt; option was not enabled initially because that particular object isn’t encrypted.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TI67qoVX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lvjsxq483dr4qiwwq7qa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TI67qoVX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lvjsxq483dr4qiwwq7qa.png" alt="Image description" width="880" height="436"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;With that said, let me take a step back and prepare a better example. So I’m quickly going to switch to SQL Server Management Studio to alter the definition of the view I tried in my previous attempt, and will &lt;em&gt;&lt;strong&gt;add encryption&lt;/strong&gt;&lt;/em&gt; to it:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--duh6E819--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a3q1kr4ihx43urgb741d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--duh6E819--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a3q1kr4ihx43urgb741d.png" alt="Image description" width="880" height="436"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Let me take a pause here to expand a bit on this WITH ENCRYPTION option. It turns out that right after altering the definition of the view and adding the encryption option, I can no longer see its definition, even if my user is the owner and I have sysadmin privilege granted:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Sv0bKOj3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z34qqjcc1gf6nb26kzd0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Sv0bKOj3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z34qqjcc1gf6nb26kzd0.png" alt="Image description" width="880" height="436"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;By the way, it doesn’t matter if you try to get the definition of the view through the help of the sp_helptext Stored Procedure, because you will reach the same dead-end:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PKcKQlWc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g96bmczm1qiinjwxpbzi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PKcKQlWc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g96bmczm1qiinjwxpbzi.png" alt="Image description" width="880" height="436"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Now, to revert this, you need to have the source code of the ALTER VIEW command for the specific view that you want to modify, but what if you don’t? Well, without a backup that contains the original definition of the view, you are pretty much fried. But rest assured, because that’s precisely where SQL Decryptor will shine, so let me go to the tool again and re-attempt my previously failed demonstration:&lt;/p&gt;

&lt;p&gt;As you can see, not only the &lt;em&gt;&lt;strong&gt;Decrypt in-place&lt;/strong&gt;&lt;/em&gt; option is enabled, but I can also see the definition of the view that I couldn’t back in SQL Server Management Studio, cool!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HWO4Q3TO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4eh0b0rp3bnyhz0sqkfg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HWO4Q3TO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4eh0b0rp3bnyhz0sqkfg.png" alt="Image description" width="528" height="934"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--P0liKRIv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ewiqur9rtyd623sal196.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P0liKRIv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ewiqur9rtyd623sal196.png" alt="Image description" width="880" height="436"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Now, if I hit the &lt;em&gt;Decrypt in-place&lt;/em&gt; option, then it will prompt me with the following:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9k46v4dg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x4itvrqy0oxn2erpruge.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9k46v4dg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x4itvrqy0oxn2erpruge.png" alt="Image description" width="880" height="436"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;If I hit &lt;em&gt;No&lt;/em&gt; and attempt to go through the &lt;em&gt;Decryption Wizard&lt;/em&gt; one more time, this is what I will see:&lt;br&gt;
 &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ej6qmZ7h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a2zu960qkvihub9pqi4r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ej6qmZ7h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a2zu960qkvihub9pqi4r.png" alt="Image description" width="880" height="436"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;The cool thing about the Decryption Wizard is that you can either generate the DDL script of the objects that you want to recover or revert the encryption right in the database:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7H7UISqk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1pfghhs8kos2aao7bwg8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7H7UISqk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1pfghhs8kos2aao7bwg8.png" alt="Image description" width="880" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For simplicity, I’m going to pick the &lt;em&gt;Decrypt in-place (alter objects)&lt;/em&gt; option so that the object is modified directly in my database:&lt;/p&gt;

&lt;p&gt;As you can see, the tool will put a green round-check icon next to the object that has been successfully altered.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JtiTKMOG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1g84v2jp2eodimuoe7ul.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JtiTKMOG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1g84v2jp2eodimuoe7ul.png" alt="Image description" width="880" height="436"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;If I go back to SQL Server Management Studio, I can retrieve the definition of the view once again, either through the GUI or through the sp_helptext Stored Procedure:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--y8eQbkOt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4r90s8cn210zkemfotf5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--y8eQbkOt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4r90s8cn210zkemfotf5.png" alt="Image description" width="880" height="436"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zGEziTx0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8gvh5glkqlhmbmk2m6yr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zGEziTx0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8gvh5glkqlhmbmk2m6yr.png" alt="Image description" width="880" height="436"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The same behavior/functionality will be provided for Stored Procedures, Functions, and Triggers, which is very cool!&lt;/p&gt;

&lt;p&gt;This was a rough introduction to the tool, but I think that if you reached this point, you now have a very good idea of the specific problem that it solves for you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final thoughts&lt;/strong&gt;&lt;br&gt;
● I can already see a big use case for this tool: imagine that you are a new database administrator that has just joined the team and has inherited a set of SQL Server instances to provide support to. Now, a DBA that previously was in the team had the magnificent idea to encrypt many database objects to hide their definition even from the DBAs with the highest possible privileges; but guess what, there’s currently no available database backup where the original definition of those objects can be found, so you cannot even give proper maintenance to those hidden structures. Luckily for you, Decryptor for SQL Server can save the day with a few clicks to avoid the completion of the perfect recipe for a wonderful disaster.&lt;/p&gt;

&lt;p&gt;● Using the WITH ENCRYPTION hint within the definition of your database objects can make all the sense in the world, but you have to be very careful on how you manage things within your environment because if not done properly it’s like locking the door of your home, walking out and leaving the keys inside… but Decryptor for SQL Server is that spare key under the carpet to save the day ;)&lt;/p&gt;

</description>
      <category>devart</category>
      <category>sqlserver</category>
      <category>database</category>
      <category>security</category>
    </item>
    <item>
      <title>Checking out dbForge’s Event Profiler for SQL Server</title>
      <dc:creator>Alejandro Cobar</dc:creator>
      <pubDate>Wed, 15 Jun 2022 15:17:17 +0000</pubDate>
      <link>https://dev.to/alejandrocobar/checking-out-dbforges-event-profiler-for-sql-server-2g85</link>
      <guid>https://dev.to/alejandrocobar/checking-out-dbforges-event-profiler-for-sql-server-2g85</guid>
      <description>&lt;p&gt;During our run as SQL Server DBAs, sometimes we need to capture everything going on in a particular SQL Server instance. Whether it is for troubleshooting a performance issue, capturing deadlock events, or tracking a specific activity, &lt;a href="https://www.devart.com/dbforge/sql/event-profiler/download.html"&gt;SQL Profiler&lt;/a&gt; will give you the right set of options, so let’s give it a quick look.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installation&lt;/strong&gt;&lt;br&gt;
You can get dbForge Event Profiler by clicking the &lt;strong&gt;&lt;em&gt;Get For Free&lt;/em&gt;&lt;/strong&gt; button. If you go for the &lt;a href="https://www.devart.com/dbforge/sql/sql-tools/"&gt;SQL Tools&lt;/a&gt; Professional Trial, it will also include the whole suite of SQL Server Management Studio extensions, which adds a whole lot of extra value.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZwS8eV2l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sylj84pg3zpkxbacsc0x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZwS8eV2l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sylj84pg3zpkxbacsc0x.png" alt="Image description" width="880" height="496"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; Make sure you have .NET Framework 4.5.2 or higher installed.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I will be showing the standalone version of the tool, so feel free to follow along either using the same version or through the SQL Server Management Studio extension.&lt;/p&gt;

&lt;p&gt;After opening the application for the first time, click &lt;em&gt;&lt;strong&gt;New&lt;/strong&gt;&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZrFKSXkx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/amqrt9xkxzyekdod1myu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZrFKSXkx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/amqrt9xkxzyekdod1myu.png" alt="Image description" width="880" height="427"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;You will be presented with the following view:&lt;/p&gt;

&lt;p&gt;First, specify a connection string where the application will try to connect to capture the configured events. Since we don’t have any connection set up yet, click &amp;lt;&lt;em&gt;&lt;strong&gt;Manage…&lt;/strong&gt;&lt;/em&gt;&amp;gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9p3AU19F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fg66z95fv0a1c6hltcun.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9p3AU19F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fg66z95fv0a1c6hltcun.png" alt="Image description" width="880" height="760"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Let’s click &lt;em&gt;&lt;strong&gt;New…&lt;/strong&gt;&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cCxBmlzv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s2aj9oqzcy9mcuupsco6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cCxBmlzv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s2aj9oqzcy9mcuupsco6.png" alt="Image description" width="776" height="660"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;You’ll see a regular window where you have to specify basic connection string parameters. The cool part is that you can categorize your SQL Server instance, either using any of the four presets (Development, Production, Sandbox, and Test) or creating your categories (as I already have).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uiS-b9Cg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xjn4y1sajibxb634qmfz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uiS-b9Cg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xjn4y1sajibxb634qmfz.png" alt="Image description" width="628" height="864"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Now, you can click &lt;em&gt;&lt;strong&gt;Test Connection&lt;/strong&gt;&lt;/em&gt; to confirm if you have entered everything correctly:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rAhTohT4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i39rf1ecqmvgb7kjy6bl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rAhTohT4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i39rf1ecqmvgb7kjy6bl.png" alt="Image description" width="584" height="668"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;If the connection attempt succeeds, click &lt;em&gt;&lt;strong&gt;Connect&lt;/strong&gt;&lt;/em&gt;, and you will see your new connection created:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZACSg34x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tb7a0a7gy9rgyiqxkmm7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZACSg34x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tb7a0a7gy9rgyiqxkmm7.png" alt="Image description" width="720" height="528"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;You will return back to the first screen, but with the connection setup, so the next step is to pick a template for your capturing events. It will be very familiar to you if you are used to SQL Server Profiler.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NcdbmaY_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e1finhv6v0de4z2zdjr4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NcdbmaY_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e1finhv6v0de4z2zdjr4.png" alt="Image description" width="880" height="758"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;For simplicity, I’ll be choosing &lt;em&gt;&lt;strong&gt;Standard (default)&lt;/strong&gt;&lt;/em&gt;. A neat detail is that, depending on the template you select, it will tell you what you can achieve with that particular template.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AzzaLbK---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t7qdzfqqryx56nh5hnr8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AzzaLbK---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t7qdzfqqryx56nh5hnr8.png" alt="Image description" width="880" height="758"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Below the template section, you’ll see the following options:&lt;br&gt;
● You can specify a particular date &amp;amp; time when the trace will stop.&lt;br&gt;
● You can specify the path where the file(s) will be created.&lt;br&gt;
● You can specify the size limit (in MB) for each file.&lt;br&gt;
● You can specify the maximum number of files where the captured data will be distributed.&lt;/p&gt;

&lt;p&gt;After setting all those parameters, click &lt;em&gt;&lt;strong&gt;Next&lt;/strong&gt;&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;This is what you’ll see by default.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BR9qk5EF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9vnvmj0ryvx3xd2qqjdp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BR9qk5EF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9vnvmj0ryvx3xd2qqjdp.png" alt="Image description" width="880" height="758"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;If you tick the &lt;em&gt;&lt;strong&gt;Show all&lt;/strong&gt;&lt;/em&gt; checkbox, then you will see a wide variety of events to capture:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zkbRxMlo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ik7vijz3xau7udbx3fio.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zkbRxMlo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ik7vijz3xau7udbx3fio.png" alt="Image description" width="880" height="758"&gt;&lt;/a&gt;   &lt;/p&gt;

&lt;p&gt;After clicking &lt;em&gt;&lt;strong&gt;Next&lt;/strong&gt;&lt;/em&gt;, you will be presented with the list of global fields that your trace will capture. Again, go through them to pick whatever you consider will be useful.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bNWziCyE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qdf63qwkdm4c4d847xis.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bNWziCyE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qdf63qwkdm4c4d847xis.png" alt="Image description" width="880" height="758"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;In the next window, you can specify any desired filters in the next window to narrow your result set and have an even more digestible output.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Vf29MegF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qjfd51chjged9wapxywv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Vf29MegF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qjfd51chjged9wapxywv.png" alt="Image description" width="880" height="758"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;In the next window, you can customize the fields that will be captured in your event session, along with useful descriptive information for each one.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kbXv-rjU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o019ygxkygl7gi11ho2d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kbXv-rjU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o019ygxkygl7gi11ho2d.png" alt="Image description" width="880" height="758"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;After you click &lt;em&gt;&lt;strong&gt;Execute&lt;/strong&gt;&lt;/em&gt;, you will see the live-collected data for your configured session. If you click any of the visible rows, you will see the full command (displayed on the bottom-left section) and the list of fields, with their values, along with descriptive text for each event field (displayed on the bottom-right section).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Kv0BpKef--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fze7rk47tfmz8oxiuhs3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Kv0BpKef--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fze7rk47tfmz8oxiuhs3.png" alt="Image description" width="880" height="429"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;If you want to manually stop your trace, then click the “Stop” button and a final entry named “Trace Stop” will appear.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vi8-Tpcz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nsi85mzdp1vijw240ky8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vi8-Tpcz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nsi85mzdp1vijw240ky8.png" alt="Image description" width="880" height="429"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;If you want to save this output, for post-analysis or for any other reason, click on the “Save” icon in the top toolbar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eswcY7_A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yr4sulgo5dplbqco5zx9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eswcY7_A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yr4sulgo5dplbqco5zx9.png" alt="Image description" width="880" height="429"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;That way, if you close the application and open it at a later time, then it will be available for you to open the output again:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--t9-bhlSr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4wtcv060z6bouzdee7ma.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--t9-bhlSr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4wtcv060z6bouzdee7ma.png" alt="Image description" width="880" height="429"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Back to the trace output, what if my session captured a large number of records and I want to perform searches for any matches, how can I do that? &lt;/p&gt;

&lt;p&gt;You either enter &lt;em&gt;&lt;strong&gt;Ctrl-F&lt;/strong&gt;&lt;/em&gt; or navigate to the + option displayed in the screenshot.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Y1kQ5L22--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/01fqcitpfpj4bu6l5orm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Y1kQ5L22--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/01fqcitpfpj4bu6l5orm.png" alt="Image description" width="880" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ai0pIisG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uny8xbyrauilamdd1yxu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ai0pIisG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uny8xbyrauilamdd1yxu.png" alt="Image description" width="880" height="429"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;If you are interested in obtaining a particular SQL Statement, you can either copy/paste it from the bottom-left section by clicking on top of the desired one, or you can right-click on the row that contains it and specify &lt;em&gt;&lt;strong&gt;Extract Event SQL statement to&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LdZWnjx1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c6snukbwj1m86e5sv83y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LdZWnjx1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c6snukbwj1m86e5sv83y.png" alt="Image description" width="880" height="429"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;That was a very brief demonstration of what Event Profiler can help you with. I hope you have found this helpful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final thoughts&lt;/strong&gt;&lt;br&gt;
● If you’d like to get more information about Event Profiler, you can check Devart’s official &lt;a href="https://docs.devart.com/event-profiler-for-sql-server/"&gt;documentation center&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;● You might be thinking “why would I pick dbForge Event Profiler over SQL Server Profiler if both do basically the same?”. That’s a very good question, and my best answer to you would be the fact that Microsoft has already deprecated SQL Server Profiler, which means that they will eventually kill the feature in a future release of SQL Server. Therefore, if you heavily use the feature in your workflow, then Devart has got you covered regardless of when Microsoft decides to pull the trigger ;).&lt;/p&gt;

</description>
      <category>devart</category>
      <category>database</category>
      <category>sqlserver</category>
    </item>
    <item>
      <title>Checking out dbForge’s Monitor for SQL Server</title>
      <dc:creator>Alejandro Cobar</dc:creator>
      <pubDate>Mon, 06 Jun 2022 13:10:54 +0000</pubDate>
      <link>https://dev.to/alejandrocobar/checking-out-dbforges-monitor-for-sql-server-4d9h</link>
      <guid>https://dev.to/alejandrocobar/checking-out-dbforges-monitor-for-sql-server-4d9h</guid>
      <description>&lt;p&gt;As professional production SQL Server DBAs, we have to deal with our SQL Server instances when the end-user reports that famous “slowness” with their queries. Even if the problem isn’t with the database server itself, the finger-pointing will be primarily against the database (pretty much like the Simpson’s meme where Bart is blamed for everything all the time, even if there are times when he didn’t do anything).&lt;/p&gt;

&lt;p&gt;Whether it is an issue with the database server or not, you need to have a way to confirm if your SQL Server instance is working as expected or if it is indeed throwing sparks all over the place. Now, every SQL Server DBA has its way of figuring out if the SQL Server instance is healthy or not, but sometimes the process isn’t as straightforward, or maybe they don’t even have one (worst case scenario).&lt;/p&gt;

&lt;p&gt;With that said, let’s look at what Monitor for SQL Server has to offer to see if we can incorporate it into our workflow. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installation&lt;/strong&gt;&lt;br&gt;
You can get dbForge &lt;a href="https://www.devart.com/dbforge/sql/monitor/download.html"&gt;Monitor&lt;/a&gt; by clicking on the “Get For Free” button. If you go for the SQL Tools Professional Trial, it will also include the whole suite of SQL Server Management Studio extensions, which adds a whole lot of extra value.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XFzr5aU2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vx0v78c2jipld6k8yslp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XFzr5aU2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vx0v78c2jipld6k8yslp.png" alt="Image description" width="880" height="496"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; Make sure you have installed SQL Server Management Studio 2012 or higher to proceed.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;After completing the installation, head straight to SQL Server Management Studio and open it. Once opened, establish a connection to a SQL Server instance and right-click on it.&lt;/p&gt;

&lt;p&gt;This is what you’ll be seeing:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RvCdS3Jk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1iwxscxhzpzmv7q2rjcv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RvCdS3Jk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1iwxscxhzpzmv7q2rjcv.png" alt="Image description" width="522" height="748"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;After you hit the “Show Monitor” option, this is what you’ll see:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Important Note:&lt;/strong&gt; if your dpi scaling is above 100%, some information will not be displayed properly because it will not fit the developer's intended. Let’s remember that SQL Server Management Studio doesn’t scale that well, but that’s something that happens with many applications; it is not exclusively to SQL Server Management Studio.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OxH5aBZa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lxb1zwb8v73h9y19evhc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OxH5aBZa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lxb1zwb8v73h9y19evhc.png" alt="Image description" width="880" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Within the view that you just saw, we can see a ton of general information, all below the “Overview” section, which displays the following:&lt;/p&gt;

&lt;p&gt;● CPU utilization %&lt;br&gt;
● Memory utilization (in GB)&lt;br&gt;
● Disk Activity (in MB)&lt;br&gt;
● Batch Requests/sec&lt;br&gt;
● Compile/recompile per sec&lt;br&gt;
● Waiting tasks&lt;br&gt;
● Connections&lt;br&gt;
● Deadlocks&lt;br&gt;
● Transactions/sec&lt;br&gt;
● Full scans/sec&lt;br&gt;
● Range scans/sec&lt;br&gt;
● Page reads/sec&lt;br&gt;
● Page writes/sec&lt;br&gt;
● Page faults/sec&lt;br&gt;
● Page lookup/sec&lt;br&gt;
● Page splits/sec&lt;br&gt;
● Page Life Expectancy&lt;br&gt;
● Read Latency (in ms)&lt;br&gt;
● Write Latency (in ms)&lt;br&gt;
● I/O Latency (in ms)&lt;br&gt;
● Host Properties&lt;br&gt;
● SQL Server properties&lt;/p&gt;

&lt;p&gt;Let’s see what’s in the section labeled “Data IO”:&lt;/p&gt;

&lt;p&gt;We get the total read/write amount of Megabytes and the read/write latency (in ms) per database data file (first the data files and then the transaction log files).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ijBMqKwi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d2l0soxadh6wf36aebhn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ijBMqKwi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d2l0soxadh6wf36aebhn.png" alt="Image description" width="724" height="606"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s see what’s in the section labeled “Databases”:&lt;/p&gt;

&lt;p&gt;We can see general information about all of our current databases.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PDLwqVyh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m9oxgqcp8r9nd79nj9wh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PDLwqVyh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m9oxgqcp8r9nd79nj9wh.png" alt="Image description" width="880" height="265"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s see what’s in the section labeled “Wait Stats”:&lt;/p&gt;

&lt;p&gt;We get information on the current wait stats, sorted from the highest one to the lowest one. Let me pause here to stress the importance of this information; when you’re having continuous problems with your SQL Server instance, the wait stats are one of those critical areas to keep an eye on.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4XL9HUFF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qhgucks611xokix715mo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4XL9HUFF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qhgucks611xokix715mo.png" alt="Image description" width="880" height="972"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Let’s see what’s in the section labeled “Top Queries”:&lt;/p&gt;

&lt;p&gt;This section is also a very important one because it shows the top 10 executed queries in your instance, and you can sort that information by any of the columns presented there. Not only that, but you also get the execution plan for each query, and if you hover your mouse cursor on any of the plan operators, then you will get additional information. This, combined with the wait stats information, should be enough to call it a day, but let’s keep going to see what else we can find. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9OQ2PsQt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bfce2lqq826id5wse0o5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9OQ2PsQt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bfce2lqq826id5wse0o5.png" alt="Image description" width="880" height="449"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Let’s see what’s in the section labeled “Sessions”:&lt;/p&gt;

&lt;p&gt;We get the list of sessions within our instance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1VR8AxSh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rqbs2zqwq247ywelwx0k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1VR8AxSh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rqbs2zqwq247ywelwx0k.png" alt="Image description" width="880" height="261"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Let’s see what’s in the section labeled “Backups”:&lt;/p&gt;

&lt;p&gt;We get information on our database backups. This section is another critical one because production SQL Server DBAs should be aware of the latest status of all the database backups within each SQL Server instance under his/her umbrella.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mjKBlqV7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2gr3y8x55gri6gp4ge25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mjKBlqV7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2gr3y8x55gri6gp4ge25.png" alt="Image description" width="824" height="372"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final thoughts&lt;/strong&gt;&lt;br&gt;
● After going through all the information sections that the tool provides, I can conclude that it provides a ton of value to the production DBA that has to stay on top of their game, and &lt;a href="https://www.devart.com/dbforge/sql/monitor/"&gt;SQL Server performance Monitor&lt;/a&gt; is an ideal tool to help him/her in the proactive and reactive situations.&lt;/p&gt;

&lt;p&gt;● Devart provides more information about this tool in their official &lt;a href="https://docs.devart.com/monitor/"&gt;documentation center&lt;/a&gt;, so be sure to check that out.&lt;/p&gt;

&lt;p&gt;● I’m going to be honest, I would’ve liked to see an option to export the information from each one of the sections. Something like that is very helpful when you have to report back to your manager or the business on any findings, right after your troubleshooting session; whether it is to report that everything is running smoothly like butter, or to pin-point any situation that has to be addressed. Regardless, I’m also aware that the Devart team is constantly enhancing their suite of &lt;a href="https://www.devart.com/dbforge/sql/sql-tools/"&gt;SQL Tools&lt;/a&gt;, so I guess it will only be a matter of time before that feature (or any additional) sees the light of day.&lt;/p&gt;

</description>
      <category>devart</category>
      <category>sqlserver</category>
      <category>monitoring</category>
      <category>database</category>
    </item>
    <item>
      <title>Checking out dbForge’s Unit Test for SQL Server</title>
      <dc:creator>Alejandro Cobar</dc:creator>
      <pubDate>Mon, 06 Jun 2022 13:05:01 +0000</pubDate>
      <link>https://dev.to/alejandrocobar/checking-out-dbforges-unit-test-for-sql-server-3b47</link>
      <guid>https://dev.to/alejandrocobar/checking-out-dbforges-unit-test-for-sql-server-3b47</guid>
      <description>&lt;p&gt;In the coding/software development space, you have likely heard, at least once, the term “unit test”. Let’s take a look at a definition of a unit test for software development: &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Unit testing is a software development process in which the smallest testable parts of an application, called units, are individually and independently scrutinized for proper operation. This testing methodology is done by software developers and sometimes QA staff during the development process.  The main objective of unit testing is to isolate written code to test and determine if it works as intended.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;But, how does that translate to the database development space? Let’s see if Unit Test for SQL Server answers that for us.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installation&lt;/strong&gt;&lt;br&gt;
You can get Devart’s &lt;a href="https://www.devart.com/dbforge/sql/unit-test/download.html"&gt;SQL Unit Testing&lt;/a&gt; tool by clicking on the “Get Trial” button. Doing so will also include the whole suite of SQL Server Management Studio extensions, which adds a lot of extra value.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--O6BFgTC0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lx0pfm9melvbnslnt3fj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--O6BFgTC0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lx0pfm9melvbnslnt3fj.png" alt="Image description" width="880" height="498"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; Make sure you have installed SQL Server Management Studio 2012 or higher to proceed.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;After you have completed the installation, head straight to SQL Server Management Studio and open it. Once opened, establish a connection to a SQL Server instance and go to any of your databases, and right-click on it.&lt;/p&gt;

&lt;p&gt;This is what you’ll be seeing:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wXzvjD8---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3rlu9dilg0xfem092vd3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wXzvjD8---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3rlu9dilg0xfem092vd3.png" alt="Image description" width="712" height="956"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since it’s our very first time checking Unit Test, then let’s go straight to “Add New Test”:&lt;/p&gt;

&lt;p&gt;You’ll immediately see this, so let me fill requested information to keep moving forward.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Xo_rWWaz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jpga58zafs9x9pkpch28.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Xo_rWWaz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jpga58zafs9x9pkpch28.png" alt="Image description" width="880" height="489"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Important note:&lt;/strong&gt; the tool will check if tSQLt framework is installed and will warn you that the unit test will not be created if that’s not the case, so let me go ahead and install it then.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OF8Rv-08--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x4bbnl6edasrdkeovqyv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OF8Rv-08--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x4bbnl6edasrdkeovqyv.png" alt="Image description" width="880" height="489"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;This is what we get after hitting “Yes”:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jO2NqzUG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5jzdwywnm4oq4unb19gt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jO2NqzUG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5jzdwywnm4oq4unb19gt.png" alt="Image description" width="880" height="489"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;So the block of code you see is for altering a stored procedure, so I guess that your unit test will be baked inside this stored procedure. If I take a look at the stored procedures inside my database, I can see a bunch with the prefix “tSQLt”, so now we know why the tool insisted on the installation then.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--d4FLUvu---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s7i9mblqsjejvot80owt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--d4FLUvu---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s7i9mblqsjejvot80owt.png" alt="Image description" width="450" height="740"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JaBHjwJ4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5hhrur9hxqp3vvjs1wyc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JaBHjwJ4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5hhrur9hxqp3vvjs1wyc.png" alt="Image description" width="880" height="489"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;If we take a look at the comments within that block of code, we can see that it has 3 sections:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Assemble:&lt;/strong&gt; This section is for code that sets up the environment. It often contains calls to methods such as tSQLt.FakeTable and tSQLt.SpyProcedure, along with INSERTs of relevant data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Act:&lt;/strong&gt; Execute the code under test like a stored procedure, function, or view and capture the results in variables or tables.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Assert:&lt;/strong&gt; Compare the expected and actual values, or call tSQLt.Fail in an IF statement.&lt;/p&gt;

&lt;p&gt;If I go ahead and execute the stored procedure exactly as it is, this is what I get:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XLHTtTF7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c3lp669u4tg4cnwe0bh8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XLHTtTF7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c3lp669u4tg4cnwe0bh8.png" alt="Image description" width="752" height="518"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since it’s my first attempt at something like this, I have no idea how to proceed, but lucky for me, there are informative links right in the stored procedure template that I’m going to check out before I’m able to figure out what to do next.&lt;/p&gt;

&lt;p&gt;Let me give you a tip if you simply don’t know where to start: after you install Unit Test, a new menu option will be made available right there in SQL Server Management Studio, called “Unit Test”, and this will allow you to install a sample database that has some test cases baked in for you to look around and get a feeling of how things work:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0BOzVVEl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/owv6zpmeg7w93im1nubh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0BOzVVEl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/owv6zpmeg7w93im1nubh.png" alt="Image description" width="880" height="701"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Wnrjrhqo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uqgffmzue8isupilvstf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Wnrjrhqo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uqgffmzue8isupilvstf.png" alt="Image description" width="880" height="835"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Now, if instead of clicking “Install Sample Database” you click “View Test List”, then this is what you will see:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lG1tKdFL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ubmqd8qn8zcyvtgv1zqm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lG1tKdFL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ubmqd8qn8zcyvtgv1zqm.png" alt="Image description" width="880" height="487"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;These are all the available tests within the sample database, and if you click the icon being pointed by the green arrow, then you will run all of them, so let’s check those out.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fepKfghT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5yandlirpimzgkn2zs8k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fepKfghT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5yandlirpimzgkn2zs8k.png" alt="Image description" width="880" height="487"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ds8ajVnG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zbkh0i5m4nw236gaxg4w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ds8ajVnG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zbkh0i5m4nw236gaxg4w.png" alt="Image description" width="880" height="487"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Ok, so this gives me the outcome of each test so that I can see which ones succeeded and which failed. But what if I want to take a look at a failed test to address whatever it is that I have to address? How can I do that? Simply right-click on the row with the failed test and click “Open Test”.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jNkDIRWp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/evbb2yyswahrsujijvln.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jNkDIRWp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/evbb2yyswahrsujijvln.png" alt="Image description" width="880" height="487"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;With the stored procedure open that contains the failed test, I’m going to tamper with it just a bit to force a successful test case, just to confirm that’s how that works:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XU-R8IaU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5gcwthe66i2xomdh0xey.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XU-R8IaU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5gcwthe66i2xomdh0xey.png" alt="Image description" width="880" height="1218"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And yes, that worked like a charm, cool!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PRUl37-1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fhtrrxv3zqj8qujxrngm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PRUl37-1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fhtrrxv3zqj8qujxrngm.png" alt="Image description" width="880" height="487"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Let me continue with the one I originally tried to make:&lt;/p&gt;

&lt;p&gt;This is a very basic example, so I will save it in my stored procedure and try to manually execute it without using the GUI that I showed previously.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EAjHiqEO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fpbhil7p2lgustck6qrl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EAjHiqEO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fpbhil7p2lgustck6qrl.png" alt="Image description" width="880" height="543"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;So if I try to execute my test case stored procedure directly, then I’m getting this weird error.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JkbuZNP9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/viadzw6mas0811apwwe6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JkbuZNP9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/viadzw6mas0811apwwe6.png" alt="Image description" width="880" height="519"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;But guess what? To test it properly I have to run the stored procedure called tSQLt.Run and pass my stored procedure as a parameter, just like this:&lt;/p&gt;

&lt;p&gt;As you can see, it will tell me that my test case failed because “Expected: &amp;lt;5&amp;gt; but was: &amp;lt;10&amp;gt;”. I also get a fancy table with the summary of the test case, and I assume that as you add more test cases, this table will also grow if you specify to run the entire class instead of an individual stored procedure test case.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--e6xhGRBG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qlw85s74i695sfxkaaq5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e6xhGRBG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qlw85s74i695sfxkaaq5.png" alt="Image description" width="822" height="1196"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Now let me go to my stored procedure and change that 5 for a 10 and run it again to see if I get a different output:&lt;/p&gt;

&lt;p&gt;Bingo, it worked! So I have shown you how to run unit tests manually and using the GUI.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LyX-nEj5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eps6v13t1ny3fmpwx7ho.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LyX-nEj5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eps6v13t1ny3fmpwx7ho.png" alt="Image description" width="880" height="602"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final thoughts&lt;/strong&gt;&lt;br&gt;
● Obviously, this was just a very brief look at the tool, but I encourage you to continue to dig deeper by checking Devart’s official &lt;a href="https://docs.devart.com/unit-test/"&gt;documentation center&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;● After looking at what the tool offers, I think we can safely say that the definition we saw earlier, on unit tests in the software development space, matches in the database development space. With that said, I see this as a precious tool for database developers to raise the bar in the quality department.&lt;/p&gt;

&lt;p&gt;● Suppose you are currently not covering unit tests within your database development workflow. In that case, it goes without saying that it is something that takes time to build for your particular environment. However, once you get a good grasp on it, it is worth it!&lt;/p&gt;

</description>
      <category>devart</category>
      <category>sqlserver</category>
      <category>database</category>
    </item>
    <item>
      <title>Checking out dbForge’s Index Manager for SQL Server</title>
      <dc:creator>Alejandro Cobar</dc:creator>
      <pubDate>Wed, 01 Jun 2022 12:46:53 +0000</pubDate>
      <link>https://dev.to/alejandrocobar/checking-out-dbforges-index-manager-for-sql-server-41lk</link>
      <guid>https://dev.to/alejandrocobar/checking-out-dbforges-index-manager-for-sql-server-41lk</guid>
      <description>&lt;p&gt;In this article, we’re going to be taking a look at Index Manager for SQL Server, from Devart. See what it has to offer for users like you and me and if it is a tool that you can integrate into your professional workflow.&lt;/p&gt;

&lt;p&gt;There will be times when query performance problems are going to be tied to indexes, so this tool is a perfect fit to help you navigate that road. Every professional DBA should have a way to know the status of the index structures within all the databases under his/her umbrella; that way, he/she can adopt a proactive approach instead of a reactive one to help prevent performance issues due to fragmentation within the index structures.&lt;/p&gt;

&lt;p&gt;Keep in mind that this targets on-premise deployments of SQL Server, Azure SQL Managed Instance, and/or SQL Server deployed in an Azure VM and Azure SQL DB. Also, if your database infrastructure is heavily based on Solid State Drives, then index fragmentation will be the least of your problems (it’s costly but totally worth it). &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installation&lt;/strong&gt;&lt;br&gt;
You can get &lt;a href="https://www.devart.com/dbforge/sql/index-manager/download.html"&gt;SQL Index Manager&lt;/a&gt; by clicking on the “Get Trial” button. Doing so will also include the whole suite of SQL Server Management Studio extensions, which adds a lot of extra value.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--N-Q03o-e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/797o84m7v0hgjilnv0l6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--N-Q03o-e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/797o84m7v0hgjilnv0l6.png" alt="Image description" width="880" height="498"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; Make sure you have installed SQL Server Management Studio 2012 or higher to proceed.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;After you completing the installation, head straight to SQL Server Management Studio and open it. Once opened, establish a connection to a SQL Server instance and go to any of your databases, and right-click on it.&lt;/p&gt;

&lt;p&gt;This is what you’ll be seeing:&lt;/p&gt;

&lt;p&gt;As you can see, the only option you get is “Manage Index Fragmentation”. The “Help” one is simply information about the product, nothing pragmatical within the tool itself.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HISlw9j_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3k3oqae60h8uah2yuvp6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HISlw9j_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3k3oqae60h8uah2yuvp6.png" alt="Image description" width="880" height="464"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Once I click on “Manage Index Fragmentation”, this is what I get:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eIIM20Ma--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m7tbd1k9jmgzj786d90q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eIIM20Ma--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m7tbd1k9jmgzj786d90q.png" alt="Image description" width="880" height="464"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;You can immediately see that, for my particular database, found no fragmented indexes, so no actions are required. I know that’s not very helpful, so let me prepare a better sample database to show you what the tool offers (at least you get to see what output you get when everything is fine ;) ).&lt;/p&gt;

&lt;p&gt;Ok, so this is what I now see after a 2nd attempt:&lt;/p&gt;

&lt;p&gt;I created a new table, created a non-clustered index over one of the columns, set the fill factor to 50%, and inserted a bit more than a million records of purely random data. So now, the tool shows us an item that must be addressed, so let me cover that and the rest of the visible elements within the tool.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Tvg7bAVi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ipe2sxhks7atkld09nud.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Tvg7bAVi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ipe2sxhks7atkld09nud.png" alt="Image description" width="880" height="412"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;So, in the “Action required” section, you can see that it’s telling me that the non-clustered index I created has a 99.01% of fragmentation and that the “Fix Type” suggested is a Rebuild. Let me make a quick pause here because I have to mention something important here:&lt;/p&gt;

&lt;p&gt;I’ve seen that many states that the ideal course of action is to reorganize your indexes if the fragmentation percent is between 10% - 30% and to rebuild if the fragmentation is higher than 30%. However, I’d suggest you decide that based on your particular scenario; regardless, if you click the “Options” button in the application, you’ll see that Devart has these same values set right out of the box, so make sure to test thoroughly.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;*Be very careful with that “Online” checkbox because if it’s not ticked, then an index rebuild operation will block the entire table to make it happen, and that could negatively impact your business operations. If you’re running this in a sandbox environment, that shouldn’t be that big of a deal.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xmotrPNJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l6wf3znqeaoe1wcv64t1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xmotrPNJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l6wf3znqeaoe1wcv64t1.png" alt="Image description" width="880" height="412"&gt;&lt;/a&gt;   &lt;/p&gt;

&lt;p&gt;For demonstration purposes, I’m going to execute the index operations with the values as they are:&lt;/p&gt;

&lt;p&gt;*By the way, if you click on the “Export to CSV” button, you can generate a report that you can either share with your Manager, fellow DBAs, or simply for yourself.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yx_blQiT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ts3sh9b7txj8rfbl77f0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yx_blQiT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ts3sh9b7txj8rfbl77f0.png" alt="Image description" width="880" height="412"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;With that out of the way, to proceed with my index operations, I click the checkbox on each one and hit the “Fix” button:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9S01dEcC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o524elhrf7xul21c4f15.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9S01dEcC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o524elhrf7xul21c4f15.png" alt="Image description" width="880" height="412"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;You can also script the actions that the tool intends to apply so that you can address them at your convenience.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Joj_vD0c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h0ltozm826ezqhj413s1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Joj_vD0c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h0ltozm826ezqhj413s1.png" alt="Image description" width="880" height="412"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;After the index operation is complete, you can hit the “Reanalyze” button to see a new status:&lt;/p&gt;

&lt;p&gt;And as you can see, the previously reported fragmented index was taken care of, and everything is looking good for my indexes ;).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Afqlizth--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l6z414gp7ahetnab6goa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Afqlizth--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l6z414gp7ahetnab6goa.png" alt="Image description" width="880" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final thoughts&lt;/strong&gt;&lt;br&gt;
● dbForge Index Manager gives you suitable options to manage your index structures. Index Management is a crucial task that every DBA should have within their umbrella, and this tool comes right to the rescue. &lt;/p&gt;

&lt;p&gt;● I’m not going to lie, I would’ve liked to see something to automate index management within my SQL Server instance, but I also know that the Devart team is constantly making improvements to their entire suite, so I’m sure it will only be a matter of time.&lt;/p&gt;

&lt;p&gt;● If you’d like to get even more information, you can head to the official &lt;a href="https://docs.devart.com/index-manager/"&gt;documentation center&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;● Something that I didn’t cover during the development of this post, is the possibility that the tool provides to perform operations using the command line. This opens the door for you to automate index operations using PowerShell and/or Windows Scheduled Tasks, cool!&lt;/p&gt;

</description>
      <category>devart</category>
      <category>sqlserver</category>
      <category>database</category>
    </item>
    <item>
      <title>Checking out dbForge’s Query Builder for SQL Server</title>
      <dc:creator>Alejandro Cobar</dc:creator>
      <pubDate>Tue, 31 May 2022 12:46:18 +0000</pubDate>
      <link>https://dev.to/alejandrocobar/checking-out-dbforges-query-builder-for-sql-server-3i7</link>
      <guid>https://dev.to/alejandrocobar/checking-out-dbforges-query-builder-for-sql-server-3i7</guid>
      <description>&lt;p&gt;In this article, we’re going to be taking a look at Query Builder for SQL Server, from Devart. See what it has to offer for users like you and me and if it is a tool that you can integrate into your professional workflow.&lt;/p&gt;

&lt;p&gt;Installation&lt;br&gt;
You can get &lt;a href="https://www.devart.com/dbforge/sql/querybuilder/download.html"&gt;SQL Query Builder&lt;/a&gt; by clicking on one of the “Get Trial” buttons. However, I highly recommend clicking the one that says “dbForge SQL Tools Professional Trial” because that will also include the whole suite of SQL Server Management Studio extensions, which adds a whole lot of extra value.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Wgl0uXWN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/746r0srrwcphmw3khlvh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Wgl0uXWN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/746r0srrwcphmw3khlvh.png" alt="Image description" width="880" height="498"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; As you can see, the site states that the tool requires .NET Framework 4.5.2 or higher installed, so make sure that’s the case so that you can follow along. On top of that, by now you probably already figured out that this will be a Windows-only thing, but that shouldn’t be a showstopper to give the tool a chance.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Since it’s the very first time that we will be opening the tool, then let’s click on “New”:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CwBsHh6Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cnz66g18t0ysn08utlx8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CwBsHh6Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cnz66g18t0ysn08utlx8.png" alt="Image description" width="880" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the very next screen, this is the view that we are presented:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mwX-Fnz_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jhte1o4i7hi5jkqi4d1n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mwX-Fnz_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jhte1o4i7hi5jkqi4d1n.png" alt="Image description" width="880" height="459"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;In the left section, we can see an area that says “Database Explorer”, which is probably where the connection to our SQL Server instance has to be specified.&lt;/p&gt;

&lt;p&gt;In the upper-center section, we simply see some sort of grid and a text that says, “You can drag objects from Database Explorer here.”.&lt;/p&gt;

&lt;p&gt;The bottom section has several options (Selection, Joins, Where, Group By, Having, Order By).&lt;/p&gt;

&lt;p&gt;So to give the tool an initial shot, let’s first create the connection to the SQL Server instance that we will be targeting (in my case, for demonstration purposes, I’ll go with the default instance I have setup):&lt;/p&gt;

&lt;p&gt;Let’s click first on this icon with the green cross.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--v0A8aHCt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yvcn6mhvmm9492oschms.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--v0A8aHCt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yvcn6mhvmm9492oschms.png" alt="Image description" width="880" height="459"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;You’ll see a regular window where you have to specify basic connection string parameters. The cool part is that you can categorize your SQL Server instance, either using any of the 4 presets (Development, Production, Sandbox, and Test) or create your categories (as I already have).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8EC8YsP1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qie7n1z3qmsnk3lk4d1l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8EC8YsP1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qie7n1z3qmsnk3lk4d1l.png" alt="Image description" width="416" height="568"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;If you click on the “Test Connection” button, a popup will trigger stating that you have successfully connected to your instance, and it will even tell you the SQL Server version detected (if the specified values are the correct ones, of course).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VTbTBy-c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lbr4obqow6xduespav2d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VTbTBy-c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lbr4obqow6xduespav2d.png" alt="Image description" width="454" height="564"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;If the connection succeeds, then hit the “Connect” button, and you’ll be taken back to the view with the grid, but with the connection to the instance open and with the list of databases currently hosted in there.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_mnbvR2y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/28ktvesrd463lc0dmpws.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_mnbvR2y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/28ktvesrd463lc0dmpws.png" alt="Image description" width="880" height="459"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Now, let’s do exactly what the text in the grid section says - drag and drop objects from the “Database Explorer” section.&lt;/p&gt;

&lt;p&gt;So I have 2 tables in my database called db1, and one of them has a foreign key to the other one. Let me drag first the table called “table1”:&lt;/p&gt;

&lt;p&gt;Pretty straightforward, I get a window with the name of the table, and the list of fields, and it shows me a small key icon next to the field that currently is the Primary Key.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kGFbD2YN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pt2hpo214b566cyahwyo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kGFbD2YN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pt2hpo214b566cyahwyo.png" alt="Image description" width="880" height="459"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;But you might be wondering, “why I’m not able to see the data type of each field in that area”? Well, it turns out that you can see that when you click a field and take a look at the information that appears in the “Properties” area, right below the “Database Explorer section”.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--A0CmJkHb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6gtu4o2whtwjf04pwnjc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A0CmJkHb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6gtu4o2whtwjf04pwnjc.png" alt="Image description" width="880" height="459"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Ok, now let me drag the other table to see what happens:&lt;/p&gt;

&lt;p&gt;It automatically detects that there’s a relationship between them (the foreign key I mentioned before), nice! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bNj15iRt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/61iw3nzf3hl7a5ejcw65.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bNj15iRt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/61iw3nzf3hl7a5ejcw65.png" alt="Image description" width="880" height="459"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;But you know what, the tool is called “Query Builder”, not “Diagram Builder”,… so this might not be really what it is intended for, so let’s explore a bit more to see what we’re able to find:&lt;/p&gt;

&lt;p&gt;So if you start ticking the checkbox for each column, then things will start happening in the bottom section of the screen. As you can see, it will list each one I’ve ticked, and I can give it an alias.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ylbpaei---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cef7iam18ei8dslmfta8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ylbpaei---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cef7iam18ei8dslmfta8.png" alt="Image description" width="880" height="459"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;So just by doing that, I’m getting the vibe that a query is being auto-generated for me, based on my selection of columns and the information I provide, so let me see if I can find it:&lt;/p&gt;

&lt;p&gt;I guess it was right there all along (thanks, Captain Obvious):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2dInDcPw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l0yg4avqsxrv96z2ksa8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2dInDcPw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l0yg4avqsxrv96z2ksa8.png" alt="Image description" width="880" height="459"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6-d-H681--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6cqz6fbpbdg0i94hwngk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6-d-H681--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6cqz6fbpbdg0i94hwngk.png" alt="Image description" width="880" height="459"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Ok, looking good so far. But what else can I do here? Let’s right-click on this window to find out:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gz94X6M6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s4r1t52lj1k5pnwu8ndc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gz94X6M6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s4r1t52lj1k5pnwu8ndc.png" alt="Image description" width="880" height="459"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;All right, I’ll click the “Execute” option to see what it does:&lt;/p&gt;

&lt;p&gt;A new tab called “Data” appears, and you can see the result of the query that you just saw previously. It will also specify the specific data type of each column.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NFzky9Wk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7f9nzggp4h2u9bafoz1m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NFzky9Wk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7f9nzggp4h2u9bafoz1m.png" alt="Image description" width="880" height="459"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;With that alone, I would have had enough to call it a day because the tool does so much with so little action from the user’s end, but I’m curious enough to see if I can find even more cool things to share with you, so buckle up:&lt;/p&gt;

&lt;p&gt;If I right-click on the result set, go to “Data Layout” and then click on “Card View”, this is what I see.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4lSeBBNm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r44iskqrkhxhmyxl3alz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4lSeBBNm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r44iskqrkhxhmyxl3alz.png" alt="Image description" width="880" height="459"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;You know what, this is the very first time (no joke) I’ve seen something like this. Even if you might argue that it is not the best way to consume/visualize the data, you cannot argue with the fact that it is something that differentiates Devart from the rest, and I’m not talking just for this feature, but as a whole in general.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SevVOnp6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/suing6thqyohz0eelz9a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SevVOnp6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/suing6thqyohz0eelz9a.png" alt="Image description" width="880" height="459"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;What if I need to export the result set to generate a report or whatever? We can right-click on the result set and click on “Export Data…”.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LYy9dpr7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qgq1zzfrschk3d2t5w2d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LYy9dpr7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qgq1zzfrschk3d2t5w2d.png" alt="Image description" width="880" height="459"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;We get the following set of file formats to export our data:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DifIZ9LO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zi36e32ibbs5k6jwx7lx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DifIZ9LO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zi36e32ibbs5k6jwx7lx.png" alt="Image description" width="880" height="459"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;This is what my PDF looks like after I complete the process:&lt;/p&gt;

&lt;p&gt;As you can see, I can even go ahead and format the look of my table, sweet!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--O0Eu3QpH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1coicllhde077o9br355.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--O0Eu3QpH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1coicllhde077o9br355.png" alt="Image description" width="880" height="459"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;This was just the “tip of the iceberg”. You can do so much more with the tool, but I will leave it here for today, so you can think of this post as an appetizer ;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final thoughts&lt;/strong&gt;&lt;br&gt;
● My first impression when I saw the tool was, “ok, I guess this is just another database diagraming tool”, but boy, I was wrong, Query Builder is way more than that. In this article, I showed you the very basics, and as much as I would’ve liked to show you everything, it would’ve been way too much to digest for the reader.&lt;/p&gt;

&lt;p&gt;● If you’d like to go deeper on the tool, I highly recommend going to their official &lt;a href="https://docs.devart.com/querybuilder-for-sql-server/"&gt;documentation center&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;● I see a massive particular use case for this tool. If you are a business that hires interns or junior database developers, then this is a perfect fit because they can practice and enhance their skills with Query Builder, something that is very valuable, especially in these modern times where the demand for data engineers has never been so high!&lt;/p&gt;

</description>
      <category>devart</category>
      <category>sqlserver</category>
      <category>database</category>
    </item>
    <item>
      <title>Checking out dbForge’s Data Generator for SQL Server</title>
      <dc:creator>Alejandro Cobar</dc:creator>
      <pubDate>Fri, 27 May 2022 13:17:51 +0000</pubDate>
      <link>https://dev.to/alejandrocobar/checking-out-dbforges-data-generator-for-sql-server-27c2</link>
      <guid>https://dev.to/alejandrocobar/checking-out-dbforges-data-generator-for-sql-server-27c2</guid>
      <description>&lt;p&gt;When you are working as a data/database architect, sometimes it’s a bit hard to determine/figure out right away if a database table will require an auxiliary index structure to guarantee that queries will always run fast (at least most of the time), or even if the choice you made for a particular Clustered Index will eventually negatively impact the performance of your insert, update and/or delete statements. For that reason, I think there should be a scientific process to get to the conclusion if the decisions around such index structures will benefit performance or not, and that’s where the &lt;a href="https://www.devart.com/dbforge/sql/data-generator/download.html"&gt;SQL Data Generator&lt;/a&gt; tool for SQL Server comes into play.&lt;/p&gt;

&lt;p&gt;As you’ll see during this post, the tool can let you quickly and effortlessly fill your database with enough test sample data so that you can evaluate your test cases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installation&lt;/strong&gt;&lt;br&gt;
You can &lt;a href="https://www.devart.com/dbforge/sql/data-generator/download.html"&gt;download&lt;/a&gt; dbForge Data Generator by clicking on one of the “Get Trial” buttons. However, I highly recommend clicking the one that says “dbForge SQL Tools Professional Trial” because that will also include the whole suite of SQL Server Management Studio extensions, which is worth every bit.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QZ1Tckyg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qi9c777p8iuy1r5p0ieq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QZ1Tckyg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qi9c777p8iuy1r5p0ieq.png" alt="Image description" width="880" height="498"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; As you can see, the site states that the tool requires Microsoft SQL Server Management Studio 2012 or higher installed, so make sure that’s the case so that you can follow along.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The very first time you open Data Generator, you’ll see this pretty much empty screen, so let’s click on “New” to get things going:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JiyPXhr2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bt8ork2cfhvowyze090a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JiyPXhr2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bt8ork2cfhvowyze090a.png" alt="Image description" width="880" height="449"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;You are immediately being requested to enter a connection for your SQL Server instance and a database that the tool will target.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PlG0z_xY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sx9oye0cu79l3z8525eh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PlG0z_xY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sx9oye0cu79l3z8525eh.png" alt="Image description" width="880" height="654"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Before going any further, let’s first explore what does the “Save Command Line” button at the bottom corner does:&lt;/p&gt;

&lt;p&gt;So based on the values that we specify for those parameters, it will build a command-line instruction and will also give us the possibility to save the instruction as an executable .bat file. This can be used for automation purposes, pretty cool if you ask me!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ors931ri--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wouz4ei1ajaxqxryv1bs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ors931ri--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wouz4ei1ajaxqxryv1bs.png" alt="Image description" width="880" height="716"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Moving forward, let’s specify a connection to our SQL Server instance then:&lt;/p&gt;

&lt;p&gt;Since we haven’t, because we are opening the tool for the first time, then let’s click on “Manage” to create one.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AbnJRVCP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/goyua97i9rgloczjqbrv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AbnJRVCP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/goyua97i9rgloczjqbrv.png" alt="Image description" width="880" height="679"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Let’s click on “New:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--l8NkFcgN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/62fe4j8pltfhb1n8l7ww.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--l8NkFcgN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/62fe4j8pltfhb1n8l7ww.png" alt="Image description" width="776" height="660"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;You’ll see a regular window where you have to specify basic connection string parameters. The cool part is that you can categorize your SQL Server instance, either using any of the 4 presets (Development, Production, Sandbox, and Test) or create your categories (as I already have).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GqmNfNSj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wm1vrn2u61p6gzu4au7i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GqmNfNSj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wm1vrn2u61p6gzu4au7i.png" alt="Image description" width="628" height="792"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;If you click on the “Test Connection” button, a popup will trigger stating that you have successfully connected to your instance, and it will even tell you the SQL Server version detected (if the specified values are the correct ones, of course).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--a9MaeFCV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lmudlg7g8q5sf7hy2ytp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--a9MaeFCV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lmudlg7g8q5sf7hy2ytp.png" alt="Image description" width="616" height="780"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;After you succeed with your connection creation, then hit the “Connect” button, and it will now appear listed in the “Connection Manager” window:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QVzb01AE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mygqgc8yand49hyvwtca.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QVzb01AE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mygqgc8yand49hyvwtca.png" alt="Image description" width="616" height="492"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Now with your connection selected, the list of databases will be retrieved, and you can select your target database.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--X-MdQDrQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8kn9jsatxjehmp720pnt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--X-MdQDrQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8kn9jsatxjehmp720pnt.png" alt="Image description" width="880" height="679"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;On the next screen, you’ll get all the different options to generate your test data. I’d recommend testing the different combinations until you hit the sweet spot for your particular case:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--K-VaFApA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/no3losu6pmwr8eghxaws.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--K-VaFApA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/no3losu6pmwr8eghxaws.png" alt="Image description" width="880" height="679"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Things will start to get interesting because, for each column of your desired table, you will get several options to concrete your data generation. Let me show you different screens for the same table:&lt;/p&gt;

&lt;p&gt;The cool part is that for every option that you tick, you will get a preview at the bottom of the data that will be generated, instead of ticking a ton of checkboxes to realize at the end (and probably after wasting quite some time) that it is not what you intended to do.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nxjMpRaZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6dzmwxcbeopbu7wgr7q9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nxjMpRaZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6dzmwxcbeopbu7wgr7q9.png" alt="Image description" width="880" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dte6OG9V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/di2x5c1dt7opasolwern.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dte6OG9V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/di2x5c1dt7opasolwern.png" alt="Image description" width="880" height="410"&gt;&lt;/a&gt;   &lt;/p&gt;

&lt;p&gt;You can even mess around with regular expressions - for string columns or a myriad of options available. This is a characteristic that truly sets apart the tool from anything I’ve ever seen before! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--C5lTZxrB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lwy83n525v6c0upljuoc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--C5lTZxrB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lwy83n525v6c0upljuoc.png" alt="Image description" width="880" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ehln8Jh2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ihka6lcpadrfo73fmwtq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ehln8Jh2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ihka6lcpadrfo73fmwtq.png" alt="Image description" width="880" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MvMiK3GD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pvu43g9h7yejz6t51a1n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MvMiK3GD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pvu43g9h7yejz6t51a1n.png" alt="Image description" width="880" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4Rt11wuM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aas1vnbv24m5jnxcu6r6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4Rt11wuM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aas1vnbv24m5jnxcu6r6.png" alt="Image description" width="880" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, when you are comfortable with the set of options for all the columns that you want to populate with data, then click on the green arrow:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3C7xcm1V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r1vmu10xs2ztbffdggif.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3C7xcm1V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r1vmu10xs2ztbffdggif.png" alt="Image description" width="880" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the next screen, you are given the option to execute the data population script against the selected database, save the script file to a location in your machine, or open it within the tool to take a look at it:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Important Note:&lt;/strong&gt; You’ll notice that the tool will tell you that the trial version only allows the generation of 50 rows per table, so don’t get confused if you’re not getting the thousands of results that you configured.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--W16o3JKo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xxv4aruhoms6cjzl8y49.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--W16o3JKo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xxv4aruhoms6cjzl8y49.png" alt="Image description" width="880" height="643"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Regardless of the option you choose, the tool will give you one additional screen to configure the resulting script, along with the option to backup your target database in case you think that your particular use case requires it. In every tool that I’ve reviewed from Devart, I always get a smile on my face whenever I see that they give the option to the DBA to backup the data in case something goes wrong, thanks Devart!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--X2chsoeV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/areosonkalzbl3cl3gen.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--X2chsoeV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/areosonkalzbl3cl3gen.png" alt="Image description" width="880" height="643"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Before getting to the final step, you’ll get a warning if you selected that you want to truncate your table. That’s a very user-friendly approach because the end-user could probably tick the “truncate data” checkbox by mistake, choose not to backup the data, and have the perfect recipe for an awful day (with several roundtrips to the bathroom for sure).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MZGBK48F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/659m0uw7h1e9neqe0c21.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MZGBK48F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/659m0uw7h1e9neqe0c21.png" alt="Image description" width="880" height="643"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Besides any warning, you will also be able to see the action plan that the tool intends to execute:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NZTvjkul--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/076aqcngm0upp9ycp9bp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NZTvjkul--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/076aqcngm0upp9ycp9bp.png" alt="Image description" width="880" height="645"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;The final step will be the output of the option you previously selected. In my case, I wanted to view the generated script in the built-in editor:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hlHbPb0b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i9xa1oeg0zyonqolnbnf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hlHbPb0b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i9xa1oeg0zyonqolnbnf.png" alt="Image description" width="880" height="410"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;So after clicking “Execute”, I can see the backup file successfully generated, and as advertised, my 50 sample records are right there in my database:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ogMaJzR---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pz9nzpd6nzkmgfk8rpo7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ogMaJzR---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pz9nzpd6nzkmgfk8rpo7.png" alt="Image description" width="880" height="216"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--v_BDUCH1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wttm323hy77ohggti9ul.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--v_BDUCH1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wttm323hy77ohggti9ul.png" alt="Image description" width="880" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final thoughts&lt;/strong&gt;&lt;br&gt;
● As we saw during the development of the post, the trial version of the tool will put a cap on the amount of sample data generated. However, the full functionality, in my opinion, is worth every penny!&lt;/p&gt;

&lt;p&gt;● A tool like this one can ease a lot of the process of testing how your database server will serve the required queries against databases that have grown to a large scale; this will allow you to implement a strategy well in advance and adopt a proactive measure instead of a reactive one. &lt;/p&gt;

&lt;p&gt;● If you want to get a deeper dive into the tool, you can check the corresponding official &lt;a href="https://docs.devart.com/data-generator-for-sql-server/"&gt;documentation center&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;● I’m not going to lie, and I had a jaw-dropping moment when I saw all the options available to populate each specific field. It’s the first time I’ve seen something like this, so a round of applause for the Devart team!&lt;/p&gt;

</description>
      <category>devart</category>
      <category>sqlserver</category>
      <category>database</category>
    </item>
  </channel>
</rss>
