Verwenden von benutzerdefinierten Tabellen
Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse Analytics
Benutzerdefinierte Tabellen stellen Tabelleninformationen dar. Sie werden als Parameter verwendet, wenn Sie Tabellendaten in gespeicherte Prozeduren oder benutzerdefinierte Funktionen übergeben. Benutzerdefinierte Tabellen können nicht verwendet werden, um Spalten in einer Datenbanktabelle darzustellen.
Das Database-Objekt verfügt über eine UserDefinedTableTypes-Eigenschaft, die auf ein UserDefinedTableTypeCollection-Objekt verweist. Jedes UserDefinedTableType Objekt in dieser Auflistung verfügt über eine Columns-Eigenschaft , die auf eine Auflistung von Column Objekten verweist, die die Spalten in der benutzerdefinierten Tabelle auflisten. Verwenden Sie die Add-Methode, um Spalten zu einer benutzerdefinierten Tabelle hinzuzufügen.
Wenn Sie eine neue benutzerdefinierte Tabelle mithilfe des UserDefinedTableType-Objekts definieren, müssen Sie Spalten und einen Primärschlüssel basierend auf einer der Spalten bereitstellen.
Benutzerdefinierte Tabellentypen können nicht geändert werden, nachdem sie erstellt wurden. UserDefinedTableType unterstützt nicht die Alter-Methode. Benutzerdefinierte Tabellentypen können über CHECK-Einschränkungen verfügen. Allerdings lösen einige CHECK-Vorgänge Ausnahmen aus, da der Typ nicht änderbar ist.
Die DataType-Klasse wird verwendet, um den Datentyp anzugeben, der Spalten und Parametern zugeordnet wird. Verwenden Sie diesen Typ, um den benutzerdefinierten Tabellentyp als Parameter für benutzerdefinierte Funktionen und gespeicherte Prozeduren festzulegen.
Beispiele
Zum Verwenden eines angegebenen Codebeispiels müssen Sie die Programmierumgebung, Programmiervorlage und die zu verwendende Programmiersprache auswählen, um Ihre Anwendung zu erstellen. Weitere Informationen finden Sie unter Erstellen eines Visual C#-SMO-Projekts in Visual Studio .NET.
Erstellen einer benutzerdefinierten Tabelle in Visual Basic
Für dieses Beispiel müssen Sie eine Imports-Anweisung für die Klassenbibliothek einbinden, die den StringCollection -Typ enthält.
Imports System.Collections.Specialized
Das Codebeispiel zeigt, wie eine benutzerdefinierte Tabelle erstellt und als Parameter in einer benutzerdefinierten Funktion verwendet wird.
'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()
Erstellen einer benutzerdefinierten Tabelle in Visual C#
Für dieses Beispiel müssen Sie eine Imports-Anweisung für die Klassenbibliothek einbinden, die den StringCollection -Typ enthält.
using System.Collections.Specialized;
Das Codebeispiel zeigt, wie eine benutzerdefinierte Tabelle erstellt und als Parameter in einer benutzerdefinierten Funktion verwendet wird.
{
//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();
}
Erstellen einer benutzerdefinierten Tabelle in PowerShell
Für dieses Beispiel müssen Sie eine Imports-Anweisung für die Klassenbibliothek einbinden, die den StringCollection -Typ enthält.
using System.Collections.Specialized;
Das Codebeispiel zeigt, wie eine benutzerdefinierte Tabelle erstellt und als Parameter in einer benutzerdefinierten Funktion verwendet wird.
# 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()
Weitere Informationen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für