Tag: SQL Prompt

  • SQL Prompt Fixes Missing Begin End in Procs

    SQL Prompt is a fantastic coding aid, but it does more than format your code and provide intellisense. Over time, the team has enhanced SQL Prompt to also guide you along and fix some bad code that your team might write out of habit.

    SQL Prompt 10.1 released recently, and one of the recent fixes is for an issue that we’ve denoted as ST003. This is an issue where a procedure is not enclosed in a Begin  End. Here’s an example.

    I started writing this proc, which looks normal. I’m not sure what isn’t being qualified with the red squiggles, as the query runs fine along. In any case, I do have a green underline on CREATE PROCEDURE, which let’s me know of a style issue.

    2020-05-08 10_04_59-testquery1.sql - ARISTOTLE_SQL2017.Sandbox (ARISTOTLE_Steve (58))_ - Microsoft S

    If I put the cursor on this line, I see the lightbulb in the left margin. Since this is available, I know I have a possible “fix” that SQL Prompt will handle.

    2020-05-08 10_06_39-testquery1.sql - ARISTOTLE_SQL2017.Sandbox (ARISTOTLE_Steve (58))_ - Microsoft S

    If I click this lightbulb, I see a few options.

    2020-05-08 10_06_46-testquery1.sql - ARISTOTLE_SQL2017.Sandbox (ARISTOTLE_Steve (58))_ - Microsoft S

    The top one is the one I want. When I click that, SQL Prompt will reformat my query and add the BEGIN and END.

    2020-05-08 10_06_54-testquery1.sql - ARISTOTLE_SQL2017.Sandbox (ARISTOTLE_Steve (58))_ - Microsoft S

    This can be controversial, as the END doesn’t stop things from being included in the procedure. For example, if I do this:

    2020-05-08 10_08_48-testquery1.sql - ARISTOTLE_SQL2017.Sandbox (ARISTOTLE_Steve (58))_ - Microsoft S

    I get this:

    2020-05-08 10_09_09-testquery1.sql - ARISTOTLE_SQL2017.Sandbox (ARISTOTLE_Steve (58))_ - Microsoft S

    The CREATE PROCEDURE needs to have the batch end to stop including code. The END doesn’t do this. Make sure you have the habit of ending your procedure creation with the batch separator (GO by default).

    If you haven’t tried SQL Prompt, download an eval and see what you think. If you have it, upgrade and ensure you have all the code fixes.

  • Formatting Code in ADS with SQL Prompt

    One of the most popular and widely used features of SQL Prompt is formatting code. The SQL Prompt extension is in public preview and you can get it here. I have another post that walks through the  installation.

    Once it’s installed, you will likely want to use it, and one of the things you can do is format code. This post looks at a few of the basics for formatting code.

    Quick Format

    Let’s see how this works. First, we open ADS and choose a connection from the Server pane. I right click a database and choose “New Query”(shown here).

    2020-05-13 12_05_06-Data Analysis - Azure Data Studio

    Next, I’ll enter the query here into the pane:

    SELECT DISTINCT Name
    FROM Production.Product WHERE ProductModelID IN (SELECT ProductModelID
                                                     from Production.ProductModel
                                                     where Name LIKE 'Long-Sleeve Logo Jersey%');
    GO

    Once I have this, you can see in the image that the subquery has some  poor formatting. The subquery is quite wide and some keywords are cased differently.

    Query shown in ADS

    Let’s CTRL+Shift+P to get the command palette. If I type format, I’ll see some options in the image below for formatting (or something similar).

    command palette with format options

    I’ve been testing, so the recently used commands show the format document commands, which you will often use. In this case, I’ll select Format Document with. When I do that, I’ll get a list of formatters for SQL code installed on my system. In my case, I have SQL Prompt, the default mssql formatter, and a PostgreSQL formatter.

    Installed formatters in ADS

    Once I select Prompt, formatting will begin. I see a note in the lower right corner of ADS.

    2020-05-13 12_13_58-● SQLQuery_1 - ._SQL2017.AdventureWorks2017 (Integrated) - Data Analysis - Azure

    When this is done, I can see my query is formatted appropriately (according to my style). The keywords are proper cased and the spacing for the subquery has changed.

    Reformatted code

    Setting a Default Formatter

    I don’t want a two step process every time I need to format code. In fact, the Format Document shortcut is Shift+Alt+F, and I want to use that. In order to do that, I’ll need to configure a default format.

    Note: If you haven’t and you click Shift+Alt+F, ADS will ask you to configure one.

    The command palette (CTRL+Shift+P) is the way to configure ADS. Click that and type “format”. You will see a list of commands, and you want to choose the “Format Document with” option. This brings up the list of formatters, as we saw above, but below this is the “Configure” option.

    Configure formatter option in command palette

    We choose this, and again see a list of formatters, but the text at the top has changed. In the image we can see this now says: “Select a default formatter for ‘SQL’ files”. We can pick SQL Prompt to set that.

    formatter choices

    Once we’ve done this, Shift+ALT+F will format your query.

    Changing Styles

    One of the things many of us want to do is use a custom formatting style. While the built in styles are handy, many users want custom ones. That includes me. I have a few custom styles I use regularly in SSMS. If you run ADS on Windows, your styles are imported. If not, I’ll do another post for that.

    I can change styles in the command palette. Type “SQL Prompt” in there and you see options:

    SQL Prompt Options in ADS

    The one I’ll use is the recently used one “Change active formatting style” at the top. If I pick that, I see this on my ADS install:

    SQL Prompt Formatting Styles

    There are a number of Built In styles that come with Prompt, but we can see my three custom ones have been imported from SSMS. Each time ADS starts, it imports your styles, so if you change on in SSMS, which has a better style editor, you will see it here when ADS reloads.

    I will set my “way0utwest” style as active and then reformat the query. I now see this:

    new query formatting

    The parenthesis location has changed. I also see the notice in the lower right that appeared after selecting a new active style.

    Summary

    This is just a basic look at using the formatting and choosing a style. If you are on Windows, all of your styles are available. If not, you’ll have to use the built in ones or edit one for yourself. I’ll cover editing styles in another post.

    I also have a video here of the process of formatting code: https://www.youtube.com/watch?v=EWCk7wUIL_s&feature=youtu.be

  • Installing the #SQLPrompt Public Preview in ADS

    The SQL Prompt Public preview extension for Azure Data Studio is out and you can add this easily. This is a quick post showing a few ways to install an extension to the tool.

    First, download the preview from here. Unzip the file and you should have a file named sql-prompt-0.2.0.vsix on your filesystem.

    Now, from Azure Data Studio, you have a few choices. The File menu includes an Install Extension from VSIX option.

    File menu in ADS with extension install highlighted

    If you have the Extensions pane open, there are three dots in the upper right. Click them and there is an “Install from VSIX” option.

    Extension context menu

    For now the SQL Prompt extension is not in the marketplace, but it is coming. Many third party marketplace extensions will also have you download a VSIX file, so this method works for those as well.

    Click the menu item from either source and a file browser will open. Find your SQL Prompt VSIX file and click it. You will get a third party warning in the lower right side of ADS. Click Yes to install.

    third party extension warning dialog. Click yes to install

    This will install quickly and you will get a notice it is installed in the lower right.

    install notice from ADS

    Then you can begin using the extension. CTRL+Shift+P brings up some command palette, and if you type SQL Prompt, you’ll see some of the options.

    SQL Prompt options in the command pallette

    I’ll explore some of these items in future posts.

    I’ve added a short video of this post on the Redgate YouTube channel: https://youtu.be/jplENuTg7Qo

    Installing SQL Prompt into ADS
  • SQL Prompt Fixes Always Have an Else

    SQL Prompt is a fantastic coding aid, but it does more than format your code and provide intellisense. Over time, the team has enhanced SQL Prompt to also guide you along and fix some bad code that your team might write out of habit.

    SQL Prompt 10.1 released recently, and one of the recent fixes is for an issue that we’ve denoted as BP012. This is an issue where there is a CASE statement in code, but no ELSE has been defined. An example of this is shown below:

    SELECT 
      oli.OrderLineItemKey
    , oli.OrderID
    , oli.qty
    , CASE WHEN oli.qty < 10
             THEN oli.unitcost
         WHEN  oli.qty >= 10 AND oli.qty < 20
             THEN oli.unitcost * .05
         WHEN  oli.qty >= 20 AND oli.qty < 100
             THEN oli.unitcost * .1
         END AS UnitCost
    , oli.linetotal
      FROM dbo.OrderLineItem AS oli

    This is a problem because we often find some weird data being entered. You might think there will never be more than 100 ordered, but who knows. We should always have an ELSE clause, just in case.

    Why? Here is why.

    2020-04-02 12_03_42-SQLQuery7.sql - Plato_SQL2017.sandbox (PLATO_Steve (57))_ - Microsoft SQL Server

    NULL is returned if you haven’t accounted for something.

    If you hover over, you get the issue in a tip. If you put the cursor on the line, you get the lightbulb with the fixes on the side.

    2020-04-02 12_04_22-SQLQuery7.sql - Plato_SQL2017.sandbox (PLATO_Steve (57))_ - Microsoft SQL Server

    As with other fixes, you can click the light bulb and see the fixes.

    2020-04-02 12_05_54-SQLQuery7.sql - Plato_SQL2017.sandbox (PLATO_Steve (57))_ - Microsoft SQL Server

    When we click the top item, SQL Prompt will add an ELSE clause, with a placeholder and the cursor is here. You can start typing, and enter the expression or value that is appropriate.

    2020-04-02 12_06_03-SQLQuery7.sql - Plato_SQL2017.sandbox (PLATO_Steve (57))_ - Microsoft SQL Server

    This is another place where junior (or overloaded) developers may make a mistake. Having this in SQL Prompt allows this to be caught by the individual developer. Having this in SQL Code Guard (part of SQL Prompt and our automated build/deploy tools)  and an automated build also means the code is evaluated automatically and this certainly doesn’t go to QA.

    If you haven’t tried SQL Prompt, download an eval and see what you think. If you have it, upgrade and ensure you have all the code fixes.