This site uses cookies to deliver our services. By using this site, you acknowledge that you have read and understand our Cookie and Privacy policy. Your use of Kontext website is subject to this policy. Allow Cookies and Dismiss

[Hands on SQL Server 2012] Using CLR Types and Functions

210 views 0 comments last modified about 5 years ago Raymond

In this page

In this article, I am going to demonstrate how to use CLR (Common Language Runtime) data types and functions in SQL Server.

Prepare the CLR Type and Function

Open Visual Studio and create a Visual C# Class Library Project named “SqlServerCLR”.

image

Create a struct MyCLRType using code below:

   1:  using Microsoft.SqlServer.Server;
   2:  using System;
   3:  using System.Data.SqlTypes;
   4:   
   5:  namespace SqlServerCLR
   6:  {
   7:      [Serializable()]
   8:      [SqlUserDefinedType(Format.Native)]
   9:      public struct MyCLRType : INullable
  10:      {
  11:   
  12:          private int m_Value;
  13:          public int Value
  14:          {
  15:              get { return m_Value; }
  16:              set { m_Value = value; }
  17:          }
  18:   
  19:          private bool m_IsNull;
  20:   
  21:          public static MyCLRType Null
  22:          {
  23:              get
  24:              {
  25:                  MyCLRType type = new MyCLRType();
  26:                  type.m_IsNull = true;
  27:                  return type;
  28:              }
  29:          }
  30:   
  31:          [SqlFunction]
  32:          public static MyCLRType Parse(SqlString s)
  33:          {
  34:              if (s.IsNull)
  35:              {
  36:                  return Null;
  37:              }
  38:   
  39:              // Parse input string here to separate out coordinates 
  40:              int v = s.ToSqlInt32().Value;
  41:   
  42:              MyCLRType type = new MyCLRType();
  43:              type.Value = v;
  44:              return (type);
  45:          }
  46:   
  47:   
  48:          public override string ToString()
  49:          {
  50:              if (IsNull)
  51:                  return "Null";
  52:              else
  53:                  return Value.ToString();
  54:          }
  55:   
  56:          [SqlFunction]
  57:          public static SqlString ToSqlString(MyCLRType myType)
  58:          {
  59:              return new SqlString(myType.ToString());
  60:          }
  61:   
  62:          public bool IsNull
  63:          {
  64:              get { return m_IsNull; }
  65:          }
  66:      }
  67:  }

Build the project.

Create user defined type

   1:  CREATE ASSEMBLY SqlServerCLR
   2:  FROM 'F:\My Projects\SqlServerProjects\SqlServerCLR\bin\Release\SqlServerCLR.dll';
   3:  GO
   4:  CREATE TYPE MyCLRType 
   5:  EXTERNAL NAME SqlServerCLR.[SqlServerCLR.MyCLRType];
   6:  GO

If CLR is not enabled, execute the code below to enable it:

   1:  exec sp_configure 'clr enabled', 0;
   2:  reconfigure;

Create scalar function

   1:  CREATE FUNCTION dbo.ParseToMyType
   2:  (@string nvarchar(max))
   3:  RETURNS MyCLRType
   4:  AS
   5:  EXTERNAL NAME SqlServerCLR.[SqlServerCLR.MyCLRType].Parse
   6:  GO
   7:   
   8:  CREATE FUNCTION dbo.ParseToNVarchar
   9:  (@myType MyCLRType)
  10:  RETURNS NVARCHAR(max)
  11:  AS
  12:  EXTERNAL NAME SqlServerCLR.[SqlServerCLR.MyCLRType].ToSqlString
  13:  GO

Use the defined type

   1:  DECLARE @myType MyCLRType= dbo.ParseToMyType('1110');
   2:  print [dbo].[ParseToNVarchar](@myType);

Result:

1110

Related pages

Querying Teradata and SQL Server - Tutorial 1: The SELECT Statement

28899 views   7 comments last modified about 4 years ago

SELECT is one of the most commonly used statements. In this tutorial, I will cover the following items: Two of the principal query clauses—FROM and SELECT Data Types Built-in functions CASE expressions and variations like ISNULL and COALESCE. * The functio...

View detail

Querying Teradata and SQL Server - Tutorial 2 Filtering and Sorting

2898 views   2 comments last modified about 4 years ago

Tutorial –1 For Teradata developers, if you have no SQL Server installed, please go to the following link to download the SQL Server 2014 Expression Edition. ...

View detail

Querying Teradata and SQL Server - Tutorial 0: Preparation

2683 views   0 comments last modified about 4 years ago

In this serial, I will compare Teradata SQL with T-SQL with samples provided. This is mainly prepared for SQL Server DBAs, Developers and other users to help them quickly master the common used SQLs in Teradata platform. Similar to T-SQL, Teradata SQL implements most part of the ANSI SQL with ext...

View detail

[SQL Server 2012] 使用自带功能简化SQL

743 views   0 comments last modified about 6 years ago

在低版本SQL Server中,对于一些常用的查询功能,我们可能需要运用复杂的逻辑,如临时表,游标等等来实现,这样可能会导致代码难维护,同时产生性能问题。本文将简述用自带的功能去简单的实现这些操作。 注意:一些功能仅在SQL Server 2012以及以上版本支持。 1.查询分页 (OFFSET, FETCH) 在很多Web应用程序中,我们需要实现分页功能,在过去,我们往往通过top语句实现或者通过ROW_NUMBER;在2012中加入了FETECH以及OFFSET标准SQL中支持的功能。下面的例子是查询第11到20行数据: ...

View detail

将远程 Sql Server 服务器上的数据库备份到本地的方法

547 views   0 comments last modified about 10 years ago

首先,必须知道数据库服务器的地址(IP),连接用户名和密码、其次,可以按照下面几种方式进行:

View detail

SQL Server 附加没有日志文件ldf的数据库mdf的方法

692 views   0 comments last modified about 9 years ago

Keywords: how to attach database without log file

View detail

Add comment

Please login first to add comments.  Log in New user?  Register

Comments (0)

No comments yet.