sql-sp-generation — GitHub Copilot rule: SQL and stored procedures
A Copilot instruction file that pins down SQL conventions: table naming, keys, query style, parameters and stored procedure layout.
.github/instructions/sql-sp-generation.instructions.mdWhat sql-sp-generation does
The rule applies to **/*.sql files and steers Copilot while it writes or edits them. It covers three areas at once: schema, query style, and stored procedures.
Schema rules ask for singular table and column names, a primary key called id, plus created_at and updated_at columns. Foreign keys are declared inline, named, and carry ON DELETE CASCADE and ON UPDATE CASCADE. Queries should use uppercase keywords, list columns explicitly instead of SELECT *, qualify columns when several tables are joined, and cap result sets with LIMIT/TOP. Procedures take a usp_ prefix in PascalCase, parameters start with @ in camelCase, and required ones come first.
A separate section covers security: parameterised queries, prepared statements for dynamic SQL, no credentials inside scripts. Transactions are opened and committed explicitly, and procedures that change data get SET NOCOUNT ON. Because the file lives in the repository, it binds everyone touching that code — changing the conventions means editing the file itself.
What it helps with
- settle on one naming scheme for tables and columns across a team
- stop forgetting
created_atandupdated_aton new tables - declare foreign keys with cascades instead of manual cleanup
- write a stored procedure with a header block and a readable name
- drop
SELECT *and functions on indexed columns from queries
Example prompts for the agent
- Generate the schema for orders and order items following the sql-sp-generation rules
- Write a stored procedure
usp_GetCustomerOrderswith parameters and a header comment - Rewrite this query: no
SELECT *, add aLIMITclause
How to install sql-sp-generation
Manually: put the files in place
.github/instructions/sql-sp-generation.instructions.mdThe applyTo field sets which files it applies to
Manually: put the files in place
.claude/rules/sql-sp-generation.mdThe paths frontmatter field limits the files: move applyTo from the source into paths
AGENTS.md
Codex reads AGENTS.md: paste the rule text there
Manually: put the files in place
.cursor/rules/sql-sp-generation.mdcFrontmatter: description, globs, alwaysApply. Move applyTo from the source into globs, or the rule will not attach on its own
Manually: put the files in place
.devin/rules/sql-sp-generation.mdManually: put the files in place
.clinerules/sql-sp-generation.mdStep by step, with commands for each platform: AGENTS.md vs CLAUDE.md: what they are and which one to use
Questions about sql-sp-generation
How do I install sql-sp-generation in GitHub Copilot?
Place the file at .github/instructions/sql-sp-generation.instructions.md inside your repository.
What does sql-sp-generation do?
It gives Copilot rules for generating SQL and stored procedures: naming, keys, query style, parameters, transactions and security.
Which files does the rule apply to?
**/*.sql, as set in the applyTo field at the top of the file.
Source text
sql-sp-generation.instructions.md · MIT
--- description: 'Guidelines for generating SQL statements and stored procedures' applyTo: '**/*.sql' --- # SQL Development ## Database schema generation - all table names should be in singular form - all column names should be in singular form - all tables should have a primary key column named `id` - all tables should have a column named `created_at` to store the creation timestamp - all tables should have a column named `updated_at` to store the last update timestamp ## Database schema design - all tables should have a primary key constraint - all foreign key constraints should have a name - all foreign key constraints should be defined inline - all foreign key constraints should have `ON DELETE CASCADE` option - all foreign key constraints should have `ON UPDATE CASCADE` option - all foreign key constraints should reference the primary key of the parent table ## SQL Coding Style - use uppercase for SQL keywords (SELECT, FROM, WHERE) - use consistent indentation for nested queries and conditions - include comments to explain complex logic - break long queries into multiple lines for readability - organize clauses consistently (SELECT, FROM, JOIN, WHERE, GROUP BY, HAVING, ORDER BY) ## SQL Query Structure - use explicit column names in SELECT statements instead of SELECT * - qualify column names with table name or alias when using multiple tables - limit the use of subqueries when joins can be used instead - include LIMIT/TOP clauses to restrict result sets - use appropriate indexing for frequently queried columns - avoid using functions on indexed columns in WHERE clauses ## Stored Procedure Naming Conventions - prefix stored procedure names with 'usp_' - use PascalCase for stored procedure names - use descriptive names that indicate purpose (e.g., usp_GetCustomerOrders) - include plural noun when returning multiple records (e.g., usp_GetProducts) - include singular noun when returning single record (e.g., usp_GetProduct) ## Parameter Handling - prefix parameters with '@' - use camelCase for parameter names - provide default values for optional parameters - validate parameter values before use - document parameters with comments - arrange parameters consistently (required first, optional later) ## Stored Procedure Structure - include header comment block with description, parameters, and return values - return standardized error codes/messages - return result sets with consistent column order - use OUTPUT parameters for returning status information - prefix temporary tables with 'tmp_' ## SQL Security Best Practices - parameterize all queries to prevent SQL injection - use prepared statements when executing dynamic SQL - avoid embedding credentials in SQL scripts - implement proper error handling without exposing system details - avoid using dynamic SQL within stored procedures ## Transaction Management - explicitly begin and commit transactions - use appropriate isolation levels based on requirements - avoid long-running transactions that lock tables - use batch processing for large data operations - include SET NOCOUNT ON for stored procedures that modify data
© github · MIT · github/awesome-copilot