Eval SQL.NET Extend SQL with Dynamic Evaluation at Runtime Using C# Expression.

-- Evaluate dynamically expression in T-SQL DECLARE F16 TABLE ( Formula VARCHAR(255), X INT, Y INT, Z INT ) INSERT INTO @tableFormula VALUES ('x+y*z', 1, 2, 3 ), ('(x+y)*z', 1, 2, 3 ) -- SELECT 7 -- SELECT 9 SELECT SQLNET::New(Formula) .ValueInt('x', X) .ValueInt('y', Y) .ValueInt('z', Z).EvalInt() as Result FROM @tableFormula



What's Eval SQL?

An expression evaluator to compile and execute C# code directly in SQL



Do you offer consulting services?

Yes, you can contact us for special requests: info@zzzprojects.com



Where can I find online examples?

A lot of examples will be soon available on .NET Fiddle. This feature is under development by our company (ZZZ Projects).

Our achievements

2000+ Customers
75+ Countries
4000+ Requests closed
Over 10 000 000+ download
Over 1 000 000+ daily visitors

What we achieved over the last 4 years has grown beyond our hopes. That motivates us to continue to grow and improve all our projects. Every day, we are committed to listening to our clients to help ease the daily dev workload as much as possible.



Evaluate dynamic arithmetic expression in SQL

Make the impossible now possible. Evaluate C# expression in SQL to overcome limitations.

  • Allow trusted users to create report field and filter
  • Consume Web Service
  • Replace text in template with String Interpolation
SQL Eval - Dynamic Expression Example
-- Easy to use

-- CREATE test
DECLARE @table TABLE ( X INT, Y INT, Z INT )
INSERT  INTO @table VALUES  ( 2, 4, 6 ),  ( 3, 5, 7 ), ( 4, 6, 8 )

-- Result: 14, 22, 32
DECLARE @sqlnet SQLNET = SQLNET::New('x*y+z')
SELECT  @sqlnet.ValueInt('x', X)
               .ValueInt('y', Y)
               .ValueInt('z', Z)
               .EvalInt() as Result
FROM    @table

Split text with delimiter

Improve performance and capability for splitting text with an easy to use split function and LINQ expressions.

  • Split text with multiple delimiters
  • Split text using a regular expression
  • Include row index
SQL Eval - Split Text Example
-- CREATE test
DECLARE @t TABLE (Id INT , Input VARCHAR(MAX))
INSERT  INTO @t VALUES  ( 1, '1, 2, 3; 4; 5' ), ( 2, '6;7,8;9,10' )

-- SPLIT with many delimiters: ',' and ';'
DECLARE @sqlnet SQLNET = SQLNET::New('Regex.Split(input, ",|;")')

SELECT  *
FROM    @t AS A
        CROSS APPLY ( SELECT    *
                      FROM      dbo.SQLNET_EvalTVF_1(@sqlnet.ValueString('input', Input))
                    ) AS B

Use regular expression in SQL Server

Use Regex flexibility to overcome "LIKE" and "PATHINDEX" limitations.

  • IsMatch
  • Match
  • Matches
  • Replace
  • Split
SQL Eval - Regular Expression Example
DECLARE @customer TABLE ( Email VARCHAR(255) )

INSERT  INTO @customer
VALUES  ( 'info@zzzprojects.com' ),
        ( 'invalid.com' ),
        ( 'sales@zzzprojects.com' )

DECLARE @valid_email SQLNET = SQLNET::New('Regex.IsMatch(email, 
@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$")')

-- SELECT 'invalid.com'
SELECT * FROM @customer WHERE @valid_email.ValueString('email', Email).EvalBit() = 0

Replace xp_cmdshell with restrictive alternative

Avoid enabling xp_cmdshell and compromising your SQL Server and use instead a more restrictive solution.

  • Impersonate Context
  • Improve maintainability
  • Improve readability
  • Improve security
SQL Eval - IO Example
-- REQUIRE EXTERNAL_ACCESS permission
DECLARE @sqlnet SQLNET = SQLNET::New('
string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);

var dir = new DirectoryInfo(path);
return dir.GetFiles("*.*")
          .Select(x => new { x.FullName, FileContent = File.ReadAllText(x.FullName) })
          .OrderBy(x => x.FullName)')
          .Impersonate()

-- SELECT FullName, FileContext FROM DesktopFiles ORDER BY Fullname
EXEC dbo.SQLNET_EvalResultSet @sqlnet