https://github.com/bocharovf/tsqlcustomcodeanalysis
Custom code analysis rules for T-SQL
https://github.com/bocharovf/tsqlcustomcodeanalysis
codeanalysis sqlserver tsql visual-studio
Last synced: about 1 month ago
JSON representation
Custom code analysis rules for T-SQL
- Host: GitHub
- URL: https://github.com/bocharovf/tsqlcustomcodeanalysis
- Owner: bocharovf
- Created: 2017-10-22T20:33:24.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2017-12-04T18:44:44.000Z (about 8 years ago)
- Last Synced: 2025-01-11T22:14:28.578Z (12 months ago)
- Topics: codeanalysis, sqlserver, tsql, visual-studio
- Language: C#
- Homepage:
- Size: 1.13 MB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# About
The project demonstrate ability to extend default code analysis (CA) capabilities in VS database projects with custom CA rules. It also contains CLR user-defined function (UDF) to run code analysis directly from T-SQL.
# Content
The solution consists of projects:
* **SqlCodeAnalysisRules** - custom CA rule for VS database project. See "Run custom CA rule in Visual Studio".
* **SqlClrAnalysisObjects** - CLR UDF to run code analysis from T-SQL. See "Run custom CA rule from T-SQL".
* **SqlAnalysisCommon** - shared library with generic rule logic and resources.
* **SampleDBWithCA** - sample database project with CA enabled. Just to demonstrate custom CA rule.
* WebScraper - secondary project used to parse microsoft documentation and determine supported SQL Server versions for each function.
## Run custom CA rule in Visual Studio
1. Install SQL Server Data Tools
3. Build solution
4. Copy both SqlAnalysisCommon.dll and SqlAnalysisCommon.dll to VS extension folder:
%Visual Studio Install Dir%\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\140\Extensions\
5. Restart Visual Studio
6. Run code analysis for SampleDBWithCA project.
7. Check custom CA rule warnings for TestStoredProcedure
## Run custom CA rule from T-SQL
1. Enable CLR in SQL Server:
```
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO
```
2. Set database trustworthy:
```
ALTER DATABASE CURRENT SET TRUSTWORTHY ON;
```
3. Create required assemblies:
```
CREATE ASSEMBLY [Microsoft.SqlServer.TransactSql.ScriptDom]
FROM '... path to Microsoft.SqlServer.TransactSql.ScriptDom'
WITH PERMISSION_SET = UNSAFE;
CREATE ASSEMBLY [SqlAnalysisCommon]
FROM '... path to SqlAnalysisCommon.dll'
WITH PERMISSION_SET = UNSAFE;
CREATE ASSEMBLY [SqlClrAnalysisObjects]
FROM '... path to SqlClrAnalysisObjects.dll'
WITH PERMISSION_SET = UNSAFE;
```
4. Create UDF:
```
CREATE OR ALTER FUNCTION [dbo].[GetCodeAnalysisRuleErrors](@ruleName [nvarchar](max), @sqlText [nvarchar](max))
RETURNS TABLE (
[StartLine] [int] NULL,
[StartColumn] [int] NULL,
[Code] [nvarchar](4000) NULL,
[Description] [nvarchar](4000) NULL
) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [SqlClrAnalysisObjects].[UserDefinedFunctions].[GetCodeAnalysisRuleErrors]
```
5. Run sample query to analyse all database objects:
```
SELECT
QUOTENAME(OBJECT_SCHEMA_NAME(modules.object_id)) + '.' +
QUOTENAME(OBJECT_NAME(modules.object_id)) ObjectName,
errors.StartLine,
errors.StartColumn,
errors.Code,
errors.[Description]
FROM sys.sql_modules modules
CROSS APPLY dbo.GetCodeAnalysisRuleErrors('IncompatibleFunctionsSql2012Rule', modules.[definition]) errors
```