We're evaluating SQL Source Control against our current source control process and one of our requirements is that SQL object scripts in the repository use CREATE OR ALTER where applicable instead of the default CREATE.  I expected to find this under "Comparison Options | Behavior," but I'm not seeing it there.  Is SQL Source Control not compatible with CREATE OR ALTER syntax for applicable objects like stored procedures, functions, and views?

Best Answer

  • David AtkinsonDavid Atkinson Posts: 1,438 Rose Gold 2
    Hi - thanks for evaluating SQL Source Control. You're right to look under comparison options, as this is where the option would be, as it inherits from capabilities offered in SQL Compare. Unfortunately, SQL Compare doesn't offer this just yet, but it's on the roadmap and I'd expect it early next year. 

    What is the reason you need CREATE OR ALTER today? Even if the scripts are stored as CREATEs, these will be converted to ALTERs as needed when you deploy the changes from source control to your target databases using SQL Compare.
    David Atkinson
    Product Manager
    Redgate Software


  • Hi David - our original system used the "IF EXISTS....DROP" construct for preexisting objects.  After upgrading to SQL16 with querystore we switched to CREATE OR ALTER to keep forced execution plans when possible.  If the resulting sql compare script substituted ALTER then it should accomplish the same thing.
  • Yes, this is how it works. SQL Source Control scripts out all objects as CREATE, not because this is reflective of how we apply changes, but because we had to pick something as a way of storing the definition of the objects in version control. If you load the scripts folder (with their CREATEs) into SQL Compare and create a deployment script, this will generate the appropriate ALTERs based on the differences between the source and targets. 
    David Atkinson
    Product Manager
    Redgate Software
  • I'm using SQL source control in conjunction with other tools like beyond compare and opening the .git folder in solution explorer ( for fast deploy / testing) where the option to have the scripts be created with CREATE OR ALTER would be very handy.

    I also run into this problem doing major refactorings (using SQL Compare to script out specific objects - comparing it to an empty database and doing text replace etc on the scripts) where i have to change all create statements to alter statements.

    Any updates on the roadmap?

  • Hi @Koenraad.Dendievel,

    Thanks for letting us know about your use case. This enhancement is up for consideration and I've updated the request with the use case info you provided. It's just up for consideration and not something we're actively working on presently, but understanding customer impact definitely helps us.

  • OnanSaladOnanSalad Posts: 5 Bronze 1
    edited January 5, 2022 4:57PM
    A year later and I'm running into this same issue but now with SQL Compare.  I have a sql repo reconciliation report that uses SQL Compare to show all objects with sql discrepancies between the repo and the database.  CREATE OR ALTER is the preferred way to implement sql changes in our shop, so this report is returning many false positives because of CREATE vs CREATE OR ALTER.  I wish there was an ignore option like "Ignore CREATE\ALTER\CREATE OR ALTER."  

  • RichardReynoldsRichardReynolds Posts: 1 New member
    Hi RG, are there any updates on this, it is affecting us as well using V14 in 2023. SQLCompare is inconsistently reporting a difference on the CREATE OR ALTER syntax. Eg. It has flagged 1 function with this difference even though there are > 100 other objects with that syntax in the repo that it is not flagging. Like others, we want to use the CREATE OR ALTER to prevent losing specific object permissions as well as to prevent the loss of forced plans where they exists. Also, why not take advantage of the SSMS SMO that will allow you to script files as CREATE OR ALTER?
Sign In or Register to comment.