Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Coluna de identidade em um parâmetro com valor de tabela no procedimento, como definir DataTable


Eu tive esse mesmo problema em que queremos uma identidade no tipo, mas não queremos fornecer um valor. A chave é usar um SqlMetaData construtor para essa coluna que define useServerDefault para true :

De acordo com este artigo em usando o tipo de tabela definido pelo usuário com a coluna de identificação no ado net por Tim Van Wassenhove

SQL :
CREATE TYPE [Star].[example] AS TABLE(  
  [Ordinal] [int] IDENTITY(1,1) NOT NULL,  
  [Name] [nvarchar](200) NOT NULL,
)

C# :
var sqlMetaData = new[] 
{  
  new SqlMetaData("Ordinal", SqlDbType.Int, true, false, SortOrder.Unspecified, -1),   
  new SqlMetaData("Name", SqlDbType.NVarChar, 200)
};

sqlRecords = new HashSet<SqlDataRecord>(usersToInclude.Select(user =>
{   
  var record = new SqlDataRecord(sqlMetaData);   
  record.SetString(1, user.Name);   
  return record; 
}));

new SqlMetaData("IdentityField", SqlDbType.Int, true, false, SortOrder.Unspecified, -1)