A stored procedure is a saved block of T-SQL code, such as a query to list the rows in a table. A block of T-SQL code can be saved in a T-SQL script file. You can also store the code from a script file in a stored procedure.
There are several benefits that result from saving code in a stored procedure rather than a script file. These are some examples.
- You do not need to expose the code in a stored procedure in order to run its T-SQL code. In contrast, users need to open a script file with its code in order to run the code.
- Stored procedures also offer a means of limiting access to the underlying tables for a query. By granting access to run stored procedures without permission to read or write to the underlying tables, you can secure data but still allow visibility for data in the underlying tables through a stored procedure.
- You can use input parameters with stored procedures to vary the operation of the code inside a stored procedure. While script files do allow the use of local variables to modify the return sets from queries, script files must expose their code to allow you to modify local variables at run time.
- By gaining proficiency in segmenting a programming solution into parts based on stored procedures, you make it easier to change code over time. By adding code in short modular scripts, each script can be easier to read and maintain and even re-use in other applications. Solutions based on SQL files with scripts for queries can become increasingly long, difficult to read, and maintain as successive changes continue to be made to a solution.
Stored procedures introduce a level of abstraction between the code for a solution and using the code that is not present when you maintain your code in a script file. Therefore, if you have a simple solution that is used by one user who needs to have access to the underlying data sources for a query (or set of queries), then a script file may be better because it simplifies the solution.
CREATE PROCEDURE MyFirstSP AS BEGIN SELECT Column1, Column2, Column3 FROM Table END
ALTER PROCEDURE MyFirstSP AS BEGIN SELECT Column1, Column2 FROM Table WHERE Column3 > 10 END
DROP PROCEDURE MyFirstSP