views:

896

answers:

3

Is there any way to implement text editing macros in SSMS? I would, e.g. like to convert the the code as shown below, but with a key-press, not a long-winded regex search and replace.

This:

INSERT INTO [TABLE]
     ([fieldOne]
     ,[fieldTwo])
  VALUES
     (<fieldOne, datetime,>
     ,<fieldTwo, real(24,0))

Must become this:

INSERT INTO [TABLE]
     ([fieldOne]
     ,[fieldTwo])
  VALUES
     (@fieldOne
     ,@fieldTwo)

I know SSMS doesn't natively support this, but I also know that it is extensible, if undocumented, and there is also room for a totally external application that will take copied text, transform it, and paste it back, without having to open an editor, paste, edit, copy, and paste back to SSMS.

Editing the stored templates is not an option, as these templates are dynamically generated, and using Ctrl+Shift+M is not an option either, as I still have to type each parameter name, but without the convenience of copying and pasting in the query editor.

There is no SSMS solution! I am looking for some sort of external voodoo that can help me do this.

+1  A: 

If you are using SSMS 2005 upwards it has in built support for templates. It isn't exactly full blown macro's, but non the less it is still pretty useful.

The syntax is exactly as you have shown in your first code snippet and you simply press Ctrl+Shift+M to bring up a dialog box that prompts you for the values to go into your bits enclosed in angle brackets.

SQL server generates script in this format if you right click on a table and select "Script Table as" then pick either the insert, update or delete option.

You can also create your own custom templates, or modify one of the existing built in ones (click on View -> Template explorer to get access to the other inbuilt templates).

There is a short article on MSDN that explains how to get started with templates.

KevB
A: 

First code is template from old-good MS Query Analyzer. Shortcut to filling is Ctrl+M (but I'm not sure, maybe it is Ctrl+Shift+M).

There should be same feature in newer SSMS.

DiGi
That doesn't help me. I might as well manually edit the script.
ProfK
+2  A: 

What about an AutoHotKey script?

Depending on the complexity of your templates, you could either

  1. use AutoHotKey to play back the keystrokes needed for the regex search and replace, or
  2. copy the template to the clipboard and manipulate it directly within AutoHotKey before pasting it back.

I'm sure the first option will work. I've not tried the second.

This question gives an indication of how an AutoHotKey script can be written to listen for keyboard chords.

Ed Harper