Esta documentación está archivada y no tiene mantenimiento.

Cómo: Crear y ejecutar un tipo CLR de servidor SQL Server definido por el usuario

Cree un tipo de SQL definido por el usuario agregando un Tipo definido por el usuario a un proyecto SQL Server. Después de la implementación correcta, puede utilizarlo en todos los contextos en los que puede utilizar un tipo de sistema, incluso en definiciones de columnas, variables, parámetros, resultados de funciones, cursores, desencadenadores y replicación. Los UDT proporcionan extensibilidad del usuario del sistema de tipo de datos del servidor SQL y también capacidad para definir tipos estructurados complejos.

NoteNota

La característica de integración Common Language Runtime (CLR) está desactivada de forma predeterminada en Microsoft SQL Server y se debe habilitar con el fin de utilizar los elementos de los proyectos de SQL Server. Para habilitar la integración CLR, utilice la opción clr enabled del procedimiento almacenado sp_configure. Para obtener más información, vea Habilitación de la integración CLR.

NoteNota

Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de los valores de configuración o de edición activos. Para cambiar la configuración, elija la opción Importar y exportar configuraciones del menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Creación de un tipo definido por el usuario

Para crear un tipo definido por el usuario de SQL

  1. Abra un Proyecto de SQL Server existente o cree uno nuevo. Para obtener más información, vea Cómo: Crear un proyecto de SQL Server.

  2. En el menú Proyecto, seleccione Agregar nuevo elemento.

  3. Seleccione Tipo definido por el usuario en Agregar nuevo elemento (Cuadro de diálogo).

  4. Escriba un Nombre para el nuevo UDT.

  5. Agregue el código para definir y crear el UDT. Vea el primer ejemplo que aparece a continuación.

NoteNota

Los ejemplos en C++ se deben compilar con la opción /clr:safe del compilador.

  1. Para Visual Basic y Visual C#, en el Explorador de soluciones, abra la carpeta SecuenciasDePrueba y haga doble clic en el archivo Test.sql.

    Para Visual C++, en el Explorador de soluciones, haga doble clic en el archivo debug.sql.

  2. Agregue el código al archivo Test.sql (debug.sql en Visual C++) para ejecutar el UDT. Vea el segundo ejemplo a continuación.

  3. Presione F5 para generar, implementar y depurar el tipo definido por el usuario. Para obtener información sobre cómo implementar sin depurar, vea Cómo: Implementar elementos de proyecto de SQL Server en un servidor SQL Server.

  4. Vea los resultados en Resultados (Ventana) y seleccione Mostrar resultados desde: resultado de base de datos.

Ejemplo

Este ejemplo crea un tipo Point que puede utilizar de la misma forma que los otros tipos simples. La declaración de clase es representativa con Serializable y los atributos SqlUserDefinedTypeAttribute. La propiedad Format de SqlUserDefinedTypeAttribute determina el formato de almacenamiento del UDT. El tipo implementa la conversión de cadenas mediante la implementación de los métodos Parse y ToString. El tipo también implementa dos procedimientos de propiedad para obtener y establecer los valores de X e Y para el punto representado por esta clase.

using System;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

[Serializable()]
[SqlUserDefinedType(Format.Native)]
public struct Point : INullable
{
    private Int32 m_x;
    private Int32 m_y;
    private bool is_Null;


    public Int32 X
    {
        get
        {
            return (this.m_x);
        }
        set
        {
            m_x = value;
        }
    }


    public Int32 Y
    {
        get
        {
            return (this.m_y);
        }
        set
        {
            m_y = value;
        }
    }


    public bool IsNull
    {
        get
        {
            return is_Null;
        }
    }


    public static Point Null
    {
        get
        {
            Point pt = new Point();
            pt.is_Null = true;
            return (pt);
        }
    }


    public override string ToString()
    {
        if (this.IsNull)
        {
            return "NULL";
        }
        else
        {
            return this.m_x + ":" + this.m_y;
        }
    }


    public static Point Parse(SqlString s)
    {
        if (s.IsNull)
        {
            return Null;
        }

        // Parse input string here to separate out coordinates
        string str = Convert.ToString(s);
        string[] xy = str.Split(':');

        Point pt = new Point();
        pt.X = Convert.ToInt32(xy[0]);
        pt.Y = Convert.ToInt32(xy[1]);
        return (pt);
    }


    public SqlString Quadrant()
    {
        if (m_x == 0 && m_y == 0)
        {
            return "centered";
        } 

        SqlString stringReturn = "";

        if (m_x == 0)
        {
            stringReturn = "center";
        }
        else if (m_x > 0)
        {
            stringReturn = "right";
        } 
        else if (m_x < 0)
        {
            stringReturn = "left";
        }

        if (m_y == 0) 
        {
            stringReturn = stringReturn + " center";
        }
        else if (m_y > 0)
        {
            stringReturn = stringReturn + " top";
        }
        else if (m_y < 0)
        {
            stringReturn = stringReturn + " bottom";
        }

        return stringReturn;
    }
}

Agregue el código para ejecutar y probar el tipo definido por el usuario (Point) en el archivo Test.sql (debug.sql en Visual C++) de la carpeta SecuenciasDePrueba del proyecto. Por ejemplo, para comprobar el nuevo tipo, cree una tabla que utilice este tipo. El siguiente ejemplo muestra cómo utilizar el tipo Point en la creación de la tabla.

CREATE TABLE test_table (column1 Point)
go

INSERT INTO test_table (column1) VALUES ('1:2')
INSERT INTO test_table (column1) VALUES ('-2:3')
INSERT INTO test_table (column1) VALUES ('-3:-4')

select column1.Quadrant() from test_table

Vea también

Mostrar: