CREATE TYPE (Transact-SQL)

Mis à jour : 14 avril 2006

Crée un type de données d'alias ou défini par l'utilisateur dans une instance de SQL Server 2005. L'implémentation d'un type de données d'alias est basé sur un type de système natif SQL Server. Un type défini par l'utilisateur est implémenté à travers une classe d'un assembly dans le CLR Microsoft .NET Framework. Pour que SQL Server 2005 lie un type défini par l'utilisateur à son implémentation, l'assembly CLR contenant l'implémentation du type doit d'abord être enregistré dans SQL Server à l'aide de CREATE ASSEMBLY.

ms175007.note(fr-fr,SQL.90).gifRemarque :
La possibilité d'exécuter un code CLR est désactivée par défaut dans SQL Server. Vous pouvez créer, modifier ou supprimer des objets de base de données qui référencent des modules de code managé, mais ces références ne seront pas exécutées dans SQL Server à moins que l'option clr enabled ne soit activée en utilisant sp_configure.

Icône Lien de rubriqueConventions de la syntaxe de Transact-SQL

Syntaxe

CREATE TYPE [ schema_name. ] type_name
{ 
    FROM base_type 
    [ ( precision [ , scale ] )  ]
    [ NULL | NOT NULL ] 
  | EXTERNAL NAME assembly_name [ .class_name ] 
} [ ; ]

Arguments

  • schema_name
    Nom du schéma auquel appartient le type de données d'alias ou défini par l'utilisateur.
  • type_name
    Nom du type de données d'alias ou défini par l'utilisateur. Les noms de type doivent respecter les règles applicables aux identificateurs.
  • base_type
    Type de données fourni par SQL Server sur lequel le type de données d'alias est basé. base_type est de type sysname, sans valeur par défaut, et peut prendre l'une des valeurs suivantes :

    bigint

    binary(n)

    bit

    char(n)

    datetime

    decimal

    float

    image

    int

    money

    nchar(n)

    ntext

    numeric

    nvarchar(n | max)

    real

    smalldatetime

    smallint

    smallmoney

    sql_variant

    text

    tinyint

    uniqueidentifier

    varbinary(n | max)

    varchar(n | max)

    base_type peut également être n'importe quel synonyme de type de données correspondant à un de ces types de données système.

  • precision
    Pour decimal ou numeric, est un entier non négatif indiquant le nombre total maximal de chiffres décimaux pouvant figurer à gauche et à droite de la virgule décimale. Pour plus d'informations, consultez decimal et numeric (Transact-SQL).
  • scale
    Pour decimal ou numeric, est un entier non négatif indiquant le nombre maximal de chiffres décimaux qui peuvent figurer à droite d'une virgule décimale ; il doit être inférieur ou égal à la précision. Pour plus d'informations, consultez decimal et numeric (Transact-SQL).
  • NULL et NOT NULL
    Précise si le type accepte les valeurs NULL. S'il n'est pas spécifié, la valeur par défaut est NULL.
  • assembly_name
    Spécifie l'assembly SQL Server qui référence l'implémentation du type défini par l'utilisateur dans le CLR (Common Language Runtime). assembly_name doit correspondre à un assembly existant dans SQL Server dans la base de données active.
  • **[.**class_name ]
    Spécifie la classe au sein de l'assembly qui implémente le type défini par l'utilisateur. class_name doit être un identificateur valide et doit exister en tant que classe dans l'assembly avec la visibilité de l'assembly. class_name respecte la casse, quel que soit le classement de base de données, et doit correspondre exactement au nom de la classe dans l'assembly correspondant. Le nom de la classe peut être un nom qualifié par un espace de noms entouré de crochets ([ ]) si le langage de programmation qui est utilisé pour écrire la classe utilise le concept des espaces de noms, tel que C#. Si le paramètre class_name n'est pas spécifié, SQL Server suppose qu'il est identique à type_name.

Notes

Lorsque CREATE TYPE est utilisé pour créer un type CLR défini par l'utilisateur, la compatibilité de base de données doit être 90.

La classe de l'assembly référencé dans assembly_name, ainsi que ses méthodes, doit satisfaire tous les besoins d'implémentation d'un type défini par l'utilisateur dans SQL Server. Pour plus d'informations sur ces indicateurs, consultez CLR User-Defined Types.

Les autres considérations portent sur les points suivants :

  • La classe peut avoir des méthodes surchargées, mais ces méthodes ne peuvent être appelées qu'à partir du code managé, et non à partir de Transact-SQL.
  • Tous les membres statiques doivent être déclarés en tant que const ou readonly si assembly_name est SAFE ou EXTERNAL_ACCESS.

Au sein d'une base de données, il ne peut y avoir qu'un seul type défini par l'utilisateur enregistré par rapport à tout type spécifié qui a été téléchargé dans SQL Server à partir du CLR. Si un type de données défini par l'utilisateur est créé sur un type CLR pour lequel le type défini par l'utilisateur existe déjà dans la base de données, CREATE TYPE échoue avec une erreur. Cette restriction est nécessaire pour éviter toute ambiguïté dans la résolution de type SQL si un type CLR peut être mappé à plusieurs types définis par l'utilisateur.

Si une méthode mutateur dans le type ne renvoie pas de valeur void, l'instruction CREATE TYPE n'est pas exécutée.

Pour modifier un type défini par l'utilisateur, vous devez supprimer le type à l'aide d'une instruction DROP TYPE, puis le créer de nouveau.

Contrairement aux types définis par l'utilisateur créés à l'aide de sp_addtype, le rôle de base de données public ne dispose pas automatiquement de l'autorisation REFERENCES sur les types créés à l'aide de CREATE TYPE. Cette autorisation doit être accordée séparément.

Autorisations

Requiert l'autorisation CREATE TYPE dans la base de données actuelle et l'autorisation ALTER sur schema_name. Si schema_name n'est pas spécifié, les règles de résolution de noms par défaut pour déterminer le schéma pour l'utilisateur actuel s'appliquent. Si assembly_name est spécifié, un utilisateur doit posséder l'assembly ou disposer d'une autorisation REFERENCES sur lui.

Exemples

A. Création d'un type d'alias basé sur le type de données varchar

L'exemple suivant crée un type d'alias basé sur le type de données varchar fourni par le système.

CREATE TYPE SSN
FROM varchar(11) NOT NULL ;

B. Création d'un type de données défini par l'utilisateur

L'exemple suivant crée un type Utf8String qui référence la classe utf8string dans l'assembly utf8string. Avant de créer le type, l'assembly utf8string est enregistré dans la base de données locale.

CREATE ASSEMBLY utf8string
FROM '\\ComputerName\utf8string\utf8string.dll' ;
GO
CREATE TYPE Utf8String 
EXTERNAL NAME utf8string.[Microsoft.Samples.SqlServer.utf8string] ;
GO

Voir aussi

Référence

CREATE ASSEMBLY (Transact-SQL)
DROP TYPE (Transact-SQL)
EVENTDATA (Transact-SQL)

Autres ressources

Utilisation de types d'alias
Utilisation de types CLR définis par l'utilisateur

Aide et Informations

Assistance sur SQL Server 2005

Historique des modifications

Version Historique

14 avril 2006

Nouveau contenu :
  • Dans la section Notes, ajout de la phrase qui signale que lorsque CREATE TYPE est utilisé pour créer un type CLR défini par l'utilisateur, la compatibilité de base de données doit être 90.
  • Dans la section Arguments de [.class_name ], ajout signalant que si class_name n'est pas spécifié, SQL Server suppose qu'il est identique à type_name.