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.
Remarque : |
---|
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. |
Conventions 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 |
|