Click here to Skip to main content
11,926,429 members (56,116 online)
Click here to Skip to main content
Add your own
alternative version

Tagged as


17 bookmarked

SQL CLR Functions

, 20 Mar 2015 CPOL
Rate this:
Please Sign up or sign in to vote.
SQL CLR functions


In this tip, we are going to create an assembly using .NET managed code to encrypt and decrypt a string. After that, we will use the same assembly to create a CLR function in SQL server as a scalar function.

We can create a function within SQL Server that depends on a SQL assembly which itself is compiled using any of the .NET framework Common Language Runtime (CLR) managed code.

Beginning with SQL Server 2005, we can write user-defined functions which are of scalar (which returns single value) and table-valued function types. However, in this blog post, we are dealing with Scalar type CLR functions.

T-SQL has a lot of inbuilt functions and features. However to custom our own complex logic, we use any CLR managed code like C# or VB.NET, etc., and incorporate it in SQL environment.

Here are the steps to create Scalar CLR functions:

Create a project of type "Class Library" using Visual Studio.

Add your static methods. In our case, "Encrypt" and "Decrypt” methods.

Specify "SqlFunction()" attribute to all the functions that need to be accessed from SQL Server. This attribute can be found in "Microsoft.SqlServer.Server" namespace.

Compile & build the application in "Release" mode to get the assembly (.dll) from the Bin folder.

Now go to SQL Server MS; select your database and create New Query and execute the following statements below to enable CLR:

sp_configure 'clr enabled', 1;

If you encounter any compatibility level errors, then check to see your database compatibility level using:


If it is set to 100 or above, execute the following statement to set it to 90.

sp_dbcmptlevel 'SQLCLR', 90 

Before adding the 'DLL' to the SQL assemblies, you need to set the database to trustworthy. This can be used to reduce threats that can exist as a result of attaching a database that contains (malicious) assemblies with an EXTERNAL_ACCESS or UNSAFE permission setting:


Now expand your database node to go to "Assemblies" located under "Programmability" and create a new assembly.

Browse the DLL path from the Bin/Release folder.

Note: Assembly name will pick automatically from the imported DLL file.

Now, click the button next to Assembly owner to select the appropriate owner from the existing user list. From the "Select Assembly Owner" window, click browse... button to see all list of owners. Select appropriate names (In my case, I chose "dbo" user) from the list and click OK.

Next, we need to set valid permissions. As we are using static "Encrypt" and "Decrypt" methods, we need to set the permissions to "Unrestricted" mode as shown below:

If everything works well, you will see an assembly created within Assemblies node.

(Note: In case you get any errors, check the steps #5, #6 and #7.)

So far, most of the work is done. All we need to do now is to create two scalar functions under "Functions/Scalar-valued Functions" node. We will create Encrypt and Decrypt functions in SQL Server with an external name specific to the assembly namespace. Execute the following query to create external names:

CREATE FUNCTION [dbo].Encrypt(@Input nvarchar(max)) RETURNS nvarchar(max)
CREATE FUNCTION [dbo].Decrypt(@Input nvarchar(max)) RETURNS nvarchar(max)

When everything is ready, use the following query to Encrypt the given string:

Select dbo.Encrypt('Hello World') 

and use function to Decrypt the given encrypted string:

Select dbo.Decrypt('i9E2KOEoT7D+Doc2CBdjDA==') 

These scalar functions can be used to encrypt any sensitive information within SQL without depending on the code. Visit MSDN to know more about CLR functions.

Points of Interest

Make sure you reconfigure your database to enable CLR.


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Sreekanth Mothukuru
Software Developer (Senior)
India India
No Biography provided

You may also be interested in...

Comments and Discussions

Answer5 starts for you, just a bit edition Pin
ThanhTrungDo31-Mar-15 23:42
memberThanhTrungDo31-Mar-15 23:42 
GeneralRe: 5 starts for you, just a bit edition Pin
Sreekanth Mothukuru1-Apr-15 2:06
memberSreekanth Mothukuru1-Apr-15 2:06 
QuestionI am getting below Error please help me on this Pin
Member 1040653419-Mar-15 5:11
memberMember 1040653419-Mar-15 5:11 
AnswerRe: I am getting below Error please help me on this Pin
Sreekanth Mothukuru19-Mar-15 23:40
memberSreekanth Mothukuru19-Mar-15 23:40 
GeneralMy vote of 5 Pin
CatchExAs14-Jul-14 12:45
professionalCatchExAs14-Jul-14 12:45 
GeneralRe: My vote of 5 Pin
Sreekanth Mothukuru20-Mar-15 0:50
memberSreekanth Mothukuru20-Mar-15 0:50 
General[My vote of 2] Feedback Pin
Malte Klena2-Jul-14 5:02
memberMalte Klena2-Jul-14 5:02 
GeneralRe: [My vote of 2] Feedback Pin
Sreekanth Mothukuru20-Mar-15 0:50
memberSreekanth Mothukuru20-Mar-15 0:50 
QuestionWould it be wise to have the encrypt/decrypt function on the DB? Pin
Ashman7862-Jul-14 0:53
memberAshman7862-Jul-14 0:53 
AnswerRe: Would it be wise to have the encrypt/decrypt function on the DB? Pin
M. Sreekanth3-Jul-14 20:02
memberM. Sreekanth3-Jul-14 20:02 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.151126.1 | Last Updated 20 Mar 2015
Article Copyright 2014 by Sreekanth Mothukuru
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid