Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à :SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Base de données SQL dans Microsoft Fabric
Les tables définies par l'utilisateur représentent des informations disposées en table. Elles sont utilisées comme paramètres lorsque vous transmettez des données tabulaires dans des procédures stockées ou des fonctions définies par l'utilisateur. Les tables définies par l'utilisateur ne peuvent pas être utilisées pour représenter des colonnes dans une table de base de données.
L'objet Database a une propriété UserDefinedTableTypes qui référence un objet UserDefinedTableTypeCollection. Chaque UserDefinedTableType objet de cette collection a une propriété Columns qui fait référence à une collection d’objets Column qui répertorient les colonnes de la table définie par l’utilisateur. Utilisez la méthode Add pour ajouter des colonnes à la table définie par l'utilisateur.
Lorsque vous définissez une nouvelle table définie par l'utilisateur en utilisant l'objet UserDefinedTableType, vous devez fournir des colonnes et une clé primaire basée sur l'une des colonnes.
Les types de table définis par l'utilisateur ne peuvent pas être modifiés une fois qu'ils ont été créés. UserDefinedTableType ne prend pas en charge la méthode Alter. Les types de table définis par l'utilisateur peuvent avoir des contraintes de validation, mais certaines opérations de validation lèveront une exception car le type n'est pas modifiable.
La classe DataType est utilisée pour spécifier le type de données qui est associé aux colonnes et paramètres. Utilisez ce type pour spécifier le type de table défini par l'utilisateur comme paramètre pour des fonctions définies par l'utilisateur et des procédures stockées.
Examples
Pour utiliser un exemple de code qui est fourni, vous devrez choisir l'environnement de programmation, le modèle de programmation et le langage de programmation dans lequel créer votre application. Pour plus d’informations, consultez Créer un projet SMO Visual C# dans Visual Studio .NET.
Création d'une table définie par l'utilisateur en Visual Basic
Pour cet exemple, vous devez inclure une instruction imports pour la bibliothèque de classes qui contient le type StringCollection .
Imports System.Collections.Specialized
L'exemple montre comment créer une table définie par l'utilisateur, puis comment l'utiliser comme paramètre dans une fonction définie par l'utilisateur.
'Connect to the local, default instance of SQL Server
Dim srv As Server
srv = New Server
'Reference the AdventureWorks2022 database.
Dim db As Database
db = srv.Databases("AdventureWorks2022")
'Define a UserDefinedTableType object variable by supplying the 'database and name in the constructor.
Dim udtt As UserDefinedTableType
udtt = New UserDefinedTableType(db, "My_User_Defined_Table")
'Add three columns of different types to the
'UserDefinedTableType object.
udtt.Columns.Add(New Column(udtt, "Col1", DataType.Int))
udtt.Columns.Add(New Column(udtt, "Col2", DataType.VarCharMax))
udtt.Columns.Add(New Column(udtt, "Col3", DataType.Money))
'Define an Index object variable by supplying the user-defined
'table variable and name in the constructor.
Dim idx As Index
idx = New Index(udtt, "PK_UddtTable")
'Add the first column in the user-defined table as
'the indexed column.
idx.IndexedColumns.Add(New IndexedColumn(idx, "Col1"))
'Specify that the index is a clustered, unique, primary key.
idx.IsClustered = True
idx.IsUnique = True
idx.IndexKeyType = IndexKeyType.DriPrimaryKey
udtt.Indexes.Add(idx)
'Add the index and create the user-defined table.
udtt.Create()
'Display the Transact-SQL creation script for the
'user-defined table.
Dim sc As StringCollection
sc = udtt.Script()
For Each c As String In sc
Console.WriteLine(c)
Next
'Define a new user-defined function with a single parameter.
Dim udf As UserDefinedFunction
udf = New UserDefinedFunction(db, "My_User_Defined_Function")
udf.TextMode = False
udf.FunctionType = UserDefinedFunctionType.Scalar
udf.ImplementationType = ImplementationType.TransactSql
udf.DataType = DataType.DateTime
'Specify the parameter as a UserDefinedTableTable object.
Dim udfp As UserDefinedFunctionParameter
udfp = New UserDefinedFunctionParameter(udf, "@param")
udfp.DataType = New DataType(udtt)
udfp.IsReadOnly = True
udf.Parameters.Add(udfp)
'Specify the TextBody property to the Transact-SQL definition of the
'user-defined function.
udf.TextBody = "BEGIN RETURN (GETDATE());end"
'Create the user-defined function.
udf.Create()
Création d'une table définie par l'utilisateur en Visual C#
Pour cet exemple, vous devez inclure une instruction imports pour la bibliothèque de classes qui contient le type StringCollection .
using System.Collections.Specialized;
L'exemple montre comment créer une table définie par l'utilisateur, puis comment l'utiliser comme paramètre dans une fonction définie par l'utilisateur.
{
//Connect to the local, default instance of SQL Server
Server srv = new Server();
//Reference the AdventureWorks2022 database.
Database db = srv.Databases["AdventureWorks2022"];
//Define a UserDefinedTableType object variable by supplying the
//database and name in the constructor.
UserDefinedTableType udtt = new UserDefinedTableType(db, "My_User_Defined_Table");
//Add three columns of different types to the
//UserDefinedTableType object.
udtt.Columns.Add(new Column(udtt, "Col1", DataType.Int));
udtt.Columns.Add(new Column(udtt, "Col2", DataType.VarCharMax));
udtt.Columns.Add(new Column(udtt, "Col3", DataType.Money));
//Define an Index object variable by supplying the user-defined
//table variable and name in the constructor.
Index idx = new Index(udtt, "PK_UddtTable");
//Add the first column in the user-defined table as
//the indexed column.
idx.IndexedColumns.Add(new IndexedColumn(idx, "Col1"));
//Specify that the index is a clustered, unique, primary key.
idx.IsClustered = true;
idx.IsUnique = true;
idx.IndexKeyType = IndexKeyType.DriPrimaryKey;
udtt.Indexes.Add(idx);
//Add the index and create the user-defined table.
udtt.Create();
//Display the Transact-SQL creation script for the
//user-defined table.
System.Collections.Specialized.StringCollection sc;
sc = udtt.Script();
foreach (string s in sc)
{
Console.WriteLine(s);
}
//Define a new user-defined function with a single parameter.
UserDefinedFunction udf = new UserDefinedFunction(db, "My_User_Defined_Function");
udf.TextMode = false;
udf.FunctionType = UserDefinedFunctionType.Scalar;
udf.ImplementationType = ImplementationType.TransactSql;
udf.DataType = DataType.DateTime;
//Specify the parameter as a UserDefinedTableTable object.
UserDefinedFunctionParameter udfp = new UserDefinedFunctionParameter(udf, "@param");
udfp.DataType = new DataType(udtt);
udfp.IsReadOnly = true;
udf.Parameters.Add(udfp);
//Specify the TextBody property to the Transact-SQL definition of the
//user-defined function.
udf.TextBody = "BEGIN RETURN (GETDATE());end";
//Create the user-defined function.
udf.Create();
}
Création d'une table définie par l'utilisateur dans PowerShell
Pour cet exemple, vous devez inclure une instruction imports pour la bibliothèque de classes qui contient le type StringCollection .
using System.Collections.Specialized;
L'exemple montre comment créer une table définie par l'utilisateur, puis comment l'utiliser comme paramètre dans une fonction définie par l'utilisateur.
# Set the path context to the local, default instance of SQL Server and get a reference to AdventureWorks2022
CD \sql\localhost\default\databases
$db = get-item AdventureWorks2022
#Define a UserDefinedTableType object variable by supplying the
#database and name in the constructor.
$udtt = New-Object -TypeName Microsoft.SqlServer.Management.SMO.UserDefinedTableType `
-argumentlist $db, "My_User_Defined_Table"
#Add three columns of different types to the UserDefinedTableType object.
$type = [Microsoft.SqlServer.Management.SMO.DataType]::Int
$col = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Column `
-argumentlist $udtt, "col1",$type
$udtt.Columns.Add($col)
$type = [Microsoft.SqlServer.Management.SMO.DataType]::VarCharMax
$col = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Column `
-argumentlist $udtt, "col2",$type
$udtt.Columns.Add($col)
$type = [Microsoft.SqlServer.Management.SMO.DataType]::Money
$col = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Column `
-argumentlist $udtt, "col3",$type
$udtt.Columns.Add($col)
#Define an Index object variable by supplying the user-defined
#table variable and name in the constructor.
$idx = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Index `
-argumentlist $udtt, "PK_UddtTable"
#Add the first column in the user-defined table as
#the indexed column.
$idxcol = New-Object -TypeName Microsoft.SqlServer.Management.SMO.IndexedColumn `
-argumentlist $idx, "Col1"
$idx.IndexedColumns.Add($idxcol)
#Specify that the index is a clustered, unique, primary key.
$idx.IsClustered = $true
$idx.IsUnique = $true
$idx.IndexKeyType = [Microsoft.SqlServer.Management.SMO.IndexKeyType]::DriPrimaryKey;
#Add the index and create the user-defined table.
$udtt.Indexes.Add($idx)
$udtt.Create();
# Display the Transact-SQL creation script for the
# user-defined table.
$sc = $udtt.Script()
$sc
# Define a new user-defined function with a single parameter.
$udf = New-Object -TypeName Microsoft.SqlServer.Management.SMO.UserDefinedFunction `
-argumentlist $db, "My_User_Defined_Function"
$udf.TextMode = $false
$udf.FunctionType = [Microsoft.SqlServer.Management.SMO.UserDefinedFunctionType]::Scalar
$udf.ImplementationType = [Microsoft.SqlServer.Management.SMO.ImplementationType]::TransactSql
$udf.DataType = [Microsoft.SqlServer.Management.SMO.DataType]::DateTime
# Specify the parameter as a UserDefinedTableTable object.
$udfp = New-Object -TypeName Microsoft.SqlServer.Management.SMO.UserDefinedFunctionParameter `
-argumentlist $udf, "@param"
$type = New-Object -TypeName Microsoft.SqlServer.Management.SMO.DataType `
-argumentlist $udtt
$udfp.DataType = $type
$udfp.IsReadOnly = $true
$udf.Parameters.Add($udfp)
# Specify the TextBody property to the Transact-SQL definition of the
# user-defined function.
$udf.TextBody = "BEGIN RETURN (GETDATE());end"
# Create the user-defined function.
$udf.Create()
Voir aussi
FileGroup
Groupes de fichiers et fichiers de base de données