sql >> Base de Datos >  >> RDS >> Sqlserver

Columna de identidad en un parámetro con valores de tabla en el procedimiento, cómo definir DataTable

Tuve el mismo problema en el que queremos una identidad en el tipo, pero no queremos proporcionar un valor. La clave es usar un SqlMetaData constructor para esa columna que establece useServerDefault a true :

Según este artículo sobre utilizando el tipo de tabla definido por el usuario con la columna de identificación en 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)