Usando tabelas definidas pelo usuário

Tabelas definidas pelo usuário representam informações tabulares. Elas são usadas como parâmetros quando você transmite dados tabulares em procedimentos armazenados ou em funções definidas pelo usuário. Tabelas definidas pelo usuário não podem ser usadas para representar colunas em uma tabela de banco de dados.

O objeto Database tem uma propriedade UserDefinedTableTypes que referencia um objeto UserDefinedTableTypeCollection. Cada objeto UserDefinedTableType nessa coleção possui uma propriedade Columns()()()() que referencia uma coleção de objetos Column que lista as colunas na tabela definida pelo usuário. Use o método Adicionar para adicionar colunas à tabela definida pelo usuário.

Quando você definir uma nova tabela definida pelo usuário através do objeto UserDefinedTableType, forneça colunas e uma chave primária com base em uma das colunas.

Tipos de tabela definidos pelo usuário não podem ser alterados após serem criados. O UserDefinedTableType não oferece suporte ao método Alter. Tipos de tabela definidos pelo usuário podem ter restrições de verificação, mas algumas operações de verificação lançarão uma exceção porque o tipo não é alterável.

A classe Datatype é usada para especificar o tipo de dados que é associado a colunas e parâmetros. Use esse tipo para especificar o tipo de tabela definido pelo usuário como um parâmetro para funções definidas pelo usuário e procedimentos armazenados.

Exemplos

Para usar qualquer exemplo de código fornecido, será necessário escolher o ambiente de programação, o modelo de programação e a linguagem de programação para criar o aplicativo. Para mais informações, consulte "Como criar um projeto Visual Basic SMO no Visual Studio .NET" ou "Como criar um projeto Visual C# SMO no Visual Studio .NET" nos Manuais Online do SQL Server.

Criando uma tabela definida pelo usuário no Visual Basic

Nesse exemplo, você precisa incluir uma instrução imports para a biblioteca de classes que contém o tipo StringCollection.

Imports System.Collections.Specialized

O exemplo demonstra como criar uma tabela definida pelo usuário e, depois, como usá-la como um parâmetro em uma função definida pelo usuário.

'Connect to the local, default instance of SQL Server
Dim srv As Server
srv = New Server
'Reference the AdventureWorks database.
Dim db As Database
db = srv.Databases("AdventureWorks")
'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(db, "Col1", DataType.Int))
udtt.Columns.Add(New Column(db, "Col2", DataType.VarCharMax))
udtt.Columns.Add(New Column(db, "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()
Dim n As Integer
n = -1
Do While n < sc.Count
n = n + 1
Console.WriteLine(sc(n))
Loop
'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.Inline
'Specify the parameter as a UserDefinedTableTable object.
Dim udfp As UserDefinedFunctionParameter
udfp = New UserDefinedFunctionParameter
udfp.DataType = New DataType(udtt)
udf.Parameters.Add(udfp)
'Specify the TextBody property to the Transact-SQL definition of the
'user-defined function.
udf.TextBody = "RETURNS TABLE AS (SELECT * from @param)"
'Create the user-defined function.
udf.Create()

Criando uma tabela definida pelo usuário no Visual C#

Nesse exemplo, você precisa incluir uma instrução imports para a biblioteca de classes que contém o tipo StringCollection.

using System.Collections.Specialized;

O exemplo mostra como criar uma tabela definida pelo usuário e como usá-la como um parâmetro em uma função definida pelo usuário.

//Connect to the local, default instance of SQL Server 
{ 
   Server srv = default(Server); 
   srv = new Server(); 
   //Reference the AdventureWorks database. 
   Database db = default(Database); 
   db = srv.Databases("AdventureWorks"); 
   //Define a UserDefinedTableType object variable by supplying the
   //database and name in the constructor. 
   UserDefinedTableType udtt = default(UserDefinedTableType); 
   udtt = new UserDefinedTableType(db, "My_User_Defined_Table"); 
   //Add three columns of different types to the 
   //UserDefinedTableType object. 
   udtt.Columns.Add(new Column(db, "Col1", DataType.Int)); 
   udtt.Columns.Add(new Column(db, "Col2", DataType.VarCharMax)); 
   udtt.Columns.Add(new Column(db, "Col3", DataType.Money)); 
   //Define an Index object variable by supplying the user-defined 
   //table variable and name in the constructor. 
   Index idx = default(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. 
   StringCollection sc = default(StringCollection); 
   sc = udtt.Script(); 
   int n = 0; 
   n = -1; 
   while (n < sc.Count) { 
      n = n + 1; 
      Console.WriteLine(sc(n)); 
   } 
   //Define a new user-defined function with a single parameter. 
   UserDefinedFunction udf = default(UserDefinedFunction); 
   udf = new UserDefinedFunction(db, "My_User_Defined_Function"); 
   udf.TextMode = false; 
   udf.FunctionType = UserDefinedFunctionType.Inline; 
   //Specify the parameter as a UserDefinedTableTable object. 
   UserDefinedFunctionParameter udfp = default(UserDefinedFunctionParameter); 
   udfp = new UserDefinedFunctionParameter(); 
   udfp.DataType = new DataType(udtt); 
   udf.Parameters.Add(udfp); 
   //Specify the TextBody property to the Transact-SQL definition of the 
   //user-defined function. 
   udf.TextBody = "RETURNS TABLE AS (SELECT * from @param)"; 
   //Create the user-defined function. 
   udf.Create(); 
} 

Consulte também

Referência

Conceitos