Grab Deal : Flat 30% off on live classes + 2 free self-paced courses! - SCHEDULE CALL

Understanding SQL CLR Type Methods: Questions and Answers

Q.1. How Can You Call SQL CLR Type Methods?

Ans: SQL CLR methods must be static, meaning you cannot call them as instance methods. Instead, you must use the TypeName::MethodName() syntax. Properties can be implemented in the same way as in any other class, and you can read or write to them from T-SQL using a standard dot-separated syntax.

Q.2. Show The Implementation of a CLR Type Method.

Ans: The implementation of a CLR type called typPoint, which stores Cartesian coordinates in the database, is shown in Listing 3-9. The code is taken from the struct typPoint in typTest.cs within the sample project.

[SqlUserDefinedType(Format.Native)] public struct typPoint: INullable
private bool _Null;
private double m_x;
private double m_y;
public override string ToString()
if (this.IsNull)
return "NULL";
return this.m_x + ":" + this.m_y:
public bool IsNull

return _Null;
public static typPoint Null
typPoint pt = new typPoint();
pt.m_Null = true;
return pt;
public static typPoint Parse(SqlString s)
if (s.IsNull)
return null;
//Parse input string here to separate out points
typPoint pt = new typPoint();
char[] parms = new char[1];
string str (string)s;
string[] xy= str.Split(parms);
pt.X double.Parse(xy[0]);
pt.Y double.Parse(xy[1]); return pt;
public static double Sum(typPoint p)
return p.X + p.Y;
public double X
get { return m_x; }
set { m_x= value; }
public double Y
get { return m_y; }
set my value; }

You can process coordinates in a single database column or variable using the class's X and Y properties. To assign coordinate values to an instance of the type as a colon-delimited string (e.g., 3:4), you can use the Parse method implicitly. The ToString method can be used to read them back in the same format. Once a value is assigned, you can read or modify its X or Y portion separately by using the X and Y properties.

The class implements the INullable interface and its IsNull property. The Sum method demonstrates how to expose a static member and allow it to access instance properties by accepting an instance of the SQL CLR type of which it is a member.It's worth noting that the class is a struct with the Serializable and SqlUserDefinedType attributes. SqlUserDefinedType, like SqlUserDefinedAggregate, is required by SQL Server and appears in both the Class Library sample code and the SQL Server Database Project version.To learn more about the CLR Type method's implementation, you can explore online SQL certifications.

Q.3. How to Deploy and Test User Defined Types (CLR Types)?

Ans: For deploying UDTs, you can use attribute-based deployment for the SQL Server Database Project. The T-SQL code required to deploy the Class Library versions of the UDTs can be found in the script file CreateObjects.sql in the SSMS project provided with the sample code.

To deploy typPoint, use the following command:



The SSMS project's script file TestTypPoint.sql contains T-SQL code for testing typPoint. Running this script and examining the output will give you a thorough understanding of how to work with the type. Additionally, the script CreateTblPoint.sql creates a table with a column typed based on typPoint. After running it, execute the script file TestTblPoint.sql to see how to manipulate SQL CLR UDT-enabled tables.For testing typBakersDozen, you can find the T-SQL code in the script file TestTypBakersDozen.sql. The ParseDouble method in the script demonstrates how to write a non-SqlString parse method.

Q.4. What are The Security Levels?

Ans: There are several ways to specify the security level to grant a CLR assembly, depending on the deployment method. You need to choose one of three permission sets:

  • Safe: The assembly can only access local data and perform computational tasks.
  • External Access: The assembly can access local data, perform computational tasks, and interact with the network, file system, registry, and environment variables. While less restrictive than Safe, it still ensures server stability.
  • Unsafe: The assembly has complete access to the system and can even call unmanaged code. Loading unsafe assemblies is restricted to members of the sysadmin role, significantly compromising SQL Server security. To load an unsafe assembly, the TRUSTWORTHY property for the database where the assembly will be loaded must be set to ON, and the dbo must have UNSAFE ASSEMBLY permission (or the assembly must be specially signed).

Q.5. What is The Default Security Level When You Deploy an Assembly from Visual Studio? How Can You Change it?

Ans: When deploying an assembly from Visual Studio, the default security level is set to Safe. To change it, follow these steps:

  • Open the Solution Explorer and double-click the Properties node.
  • In the resulting property sheet designer, click the SQLCLR tab.
  • Select SAFE, EXTERNAL ACCESS, or UNSAFE from the Permission Level combo box to set the desired security level.

Alternatively, you can specify an assembly's permission set in T-SQL by entering SAFE, EXTERNAL ACCESS, or UNSAFE in the "WITH PERMISSION SET" clause of the CREATE ASSEMBLY statement.Finally, from the Permission Set combo box in the SSMS New Assembly dialogue box and the Assembly Properties dialogue box, you can select Safe, External Access, or Unrestricted to set the security level accordingly.


This guide provides valuable insights into SQL CLR (Common Language Runtime) type methods, their implementation, deployment, and security levels. We learned that SQL CLR methods must be static, and to call them, we use the TypeName::MethodName() syntax. The implementation of CLR types, exemplified by typPoint, allows us to store Cartesian coordinates in the database and perform operations on them.

The deployment process for User Defined Types (UDTs) involves attribute-based deployment for SQL Server Database Projects, along with T-SQL scripts to create and test the types. By understanding the security levels, namely Safe, External Access, and Unsafe, we can choose appropriate permission sets to control the assembly's access and operations.By leveraging the information in this guide, developers and database administrators can effectively utilize SQL CLR functionality, enhance database capabilities, and maintain robust security measures. Continuous exploration and understanding of SQL CLR empower professionals to make the most of this powerful feature within the SQL Server Training.


Trending Courses

Cyber Security

  • Introduction to cybersecurity
  • Cryptography and Secure Communication 
  • Cloud Computing Architectural Framework
  • Security Architectures and Models

Upcoming Class

-1 day 12 Jul 2024


  • Introduction and Software Testing
  • Software Test Life Cycle
  • Automation Testing and API Testing
  • Selenium framework development using Testing

Upcoming Class

-1 day 12 Jul 2024


  • Salesforce Configuration Introduction
  • Security & Automation Process
  • Sales & Service Cloud
  • Apex Programming, SOQL & SOSL

Upcoming Class

3 days 16 Jul 2024

Business Analyst

  • BA & Stakeholders Overview
  • BPMN, Requirement Elicitation
  • BA Tools & Design Documents
  • Enterprise Analysis, Agile & Scrum

Upcoming Class

-1 day 12 Jul 2024

MS SQL Server

  • Introduction & Database Query
  • Programming, Indexes & System Functions
  • SSIS Package Development Procedures
  • SSRS Report Design

Upcoming Class

7 days 20 Jul 2024

Data Science

  • Data Science Introduction
  • Hadoop and Spark Overview
  • Python & Intro to R Programming
  • Machine Learning

Upcoming Class

6 days 19 Jul 2024


  • Intro to DevOps
  • GIT and Maven
  • Jenkins & Ansible
  • Docker and Cloud Computing

Upcoming Class

-1 day 12 Jul 2024


  • Architecture, HDFS & MapReduce
  • Unix Shell & Apache Pig Installation
  • HIVE Installation & User-Defined Functions
  • SQOOP & Hbase Installation

Upcoming Class

0 day 13 Jul 2024


  • Features of Python
  • Python Editors and IDEs
  • Data types and Variables
  • Python File Operation

Upcoming Class

-1 day 12 Jul 2024

Artificial Intelligence

  • Components of AI
  • Categories of Machine Learning
  • Recurrent Neural Networks
  • Recurrent Neural Networks

Upcoming Class

6 days 19 Jul 2024

Machine Learning

  • Introduction to Machine Learning & Python
  • Machine Learning: Supervised Learning
  • Machine Learning: Unsupervised Learning

Upcoming Class

-1 day 12 Jul 2024


  • Introduction to Tableau Desktop
  • Data Transformation Methods
  • Configuring tableau server
  • Integration with R & Hadoop

Upcoming Class

0 day 13 Jul 2024