---
title: "Create Custom Templates | Microsoft Docs"
ms.custom: ""
ms.date: "06/13/2017"
ms.prod: "sql-server-2014"
ms.reviewer: ""
ms.technology: ssms
ms.topic: conceptual
helpviewer_keywords:
- "tql"
- "templates [Transact-SQL], creating"
- "templates [Transact-SQL]"
ms.assetid: 41098e78-b482-410e-bfe8-2ac10769ac4a
author: stevestein
ms.author: sstein
manager: craigg
---
# Create Custom Templates
[!INCLUDE[ssManStudioFull](../../includes/ssmanstudiofull-md.md)] comes with templates for many common tasks, but the real power of templates lies in the ability to create a custom template for a complex script that you must create frequently. In this practice you will create a simple script with few parameters, but templates are useful for long, repetitive scripts, too.
## Using Custom Templates
#### To create a custom template
1. In Template Explorer, expand **SQL Server Templates**, right-click **Stored Procedure**, point to **New**, and then click **Folder**.
2. Type **Custom** as the name of your new template folder, and then press ENTER.
3. Right-click **Custom**, point to **New**, and then click **Template**.
4. Type **WorkOrdersProc** as the name of your new template, and then press **Enter**.
5. Right-click **WorkOrdersProc**, and then click **Edit**.
6. In the **Connect to Database Engine** dialog box, verify the connection information and then click **Connect**.
7. In Query Editor, type the following script to create a stored procedure that looks up orders for a particular part, in this case the Blade. (You can copy and paste the code from the Tutorial window.)
```
USE AdventureWorks20012;
GO
IF EXISTS (
SELECT *
FROM INFORMATION_SCHEMA.ROUTINES
WHERE SPECIFIC_NAME = 'WorkOrdersForBlade')
DROP PROCEDURE dbo.WorkOrdersForBlade;
GO
CREATE PROCEDURE dbo.WorkOrdersForBlade
AS
SELECT Name, WorkOrderID
FROM Production.WorkOrder AS WO
JOIN Production.Product AS Prod
ON WO.ProductID = Prod.ProductID
WHERE Name = 'Blade';
GO
```
8. Press F5 to execute this script, creating the **WorkOrdersForBlade** procedure.
9. In Object Explorer, right-click your server, and then click **New Query**. A new Query Editor window opens.
10. In Query Editor, type **EXECUTE dbo.WorkOrdersForBlade**, and then press F5 to execute the query. Confirm that the **Results** pane returns a list of work orders for blades.
11. Edit the template script (the script in step 7), replacing the product name Blade with the parameter *<*product_name, `nvarchar(50)`, name*>*, in four places.
> [!NOTE]
> Parameters require three elements: the name of the parameter that you want to replace, the data type of the parameter, and a default value for the parameter.
12. Now the script should look like:
```
USE AdventureWorks20012;
GO
IF EXISTS (
SELECT *
FROM INFORMATION_SCHEMA.ROUTINES
WHERE SPECIFIC_NAME = 'WorkOrdersFor')
DROP PROCEDURE dbo.WorkOrdersFor;
GO
CREATE PROCEDURE dbo.WorkOrdersFor
AS
SELECT Name, WorkOrderID
FROM Production.WorkOrder AS WO
JOIN Production.Product AS Prod
ON WO.ProductID = Prod.ProductID
WHERE Name = '';
GO
```
13. On the **File** menu, click **Save WorkOrdersProc.sql** to save your template.
#### To test the custom template
1. In Template Explorer, expand **Stored Procedure**, expand **Custom**, and then double-click **WorkOrderProc**.
2. In the **Connect to Database Engine** dialog box, complete the connection information and then click **Connect**. A new Query Editor window opens, containing the contents of the **WorkOrderProc** template.
3. On the **Query** menu, click **Specify Values for Template Parameters**.
4. In the **Replace Template Parameters** dialog box, for the `product_name` value, type **FreeWheel** (overwriting the default contents), and then click **OK** to close the **Replace Template Parameters** dialog box and modify the script in the Query Editor.
5. Press F5 to execute the query, creating the procedure.
## Next Task in Lesson
[Save Scripts as Projects or Solutions](lesson-3-3-save-scripts-as-projects-or-solutions.md)