SQL Eval Function FAQ - Eval SQL.NET

Bug Fixing

You found a bug when compiling? Report it and it will be fixed, usually within one business day.

Namespace

All namespace support by SQL CLR are supported by Eval SQL.NET.

Supported .NET Framework Libraries

  • CustomMarshalers
  • Microsoft.VisualBasic
  • Microsoft.VisualC
  • mscorlib
  • System
  • System.Configuration
  • System.Data
  • System.Data.OracleClient
  • System.Data.SqlXml
  • System.Deployment
  • System.Security
  • System.Transactions
  • System.Web.Services
  • System.Xml
  • System.Core.dll
  • System.Xml.Linq.dll
  • All common namespaces and extension methods can be used without specifying the fullname.

You can see the full list here

Let us know if you believe we missed some.

Performance

You are worried about performance? Don't worry, Eval SQL.NET is super-fast and can evaluate over 150,000 expressions in a loop under one second and over 1,000,000 using a table!

Result highly vary depending of your SQL Server performance and expressions to evaluate.

DECLARE @startTime DATETIME,
@endTime DATETIME

DECLARE @I INT = -1
DECLARE @sqlnet SQLNET = SQLNET::New('i + 1')
-- LET Compile the expression to check the compiled performance
SET @I = @sqlnet.Val('i', @I).EvalInt()

SET @startTime = GETDATE()

WHILE @I < 125000
    BEGIN
        SET @I = @sqlnet.ValueInt('i', @I).EvalInt()
    END

SET @endTime = GETDATE()
PRINT 'StartTime = ' + CONVERT(VARCHAR(30), @startTime, 121)
PRINT 'EndTime = ' + CONVERT(VARCHAR(30), @endTime, 121)
PRINT 'Duration = ' + CONVERT(VARCHAR(30), @endTime - @starttime, 114)

Security

SQL CLR allows three types of permissions:

  • SAFE
  • EXTERNAL_ACCESS
  • UNSAFE Eval SQL.NET supports all types and is installed by default with SAFE permissions. Read more about SQL CLR Permissions

SQL Injection

This library allows to use parameter, so no SQL Injection is possible!

However, if you build the string to evaluate as you build a dynamic SQL, then there is nothing we can do for you.

Decimal throw an error!

In C#, decimals must be suffixed with "m" to make them valid. By default "1.1" in C# is a double which cannot be added with decimal value.

// Trow exception
SELECT SQLNET::New('(x)+1.1234').Val('x', 1.1).Eval() as Result

-- SELECT 2.2234
SELECT SQLNET::New('(x)+1.1234m').Val('x', 1.1).Eval() as Result

Contents