Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Colonne d'identité dans un paramètre de table dans la procédure, comment définir DataTable

J'ai eu le même problème où nous voulons une identité sur le type, mais nous ne voulons pas fournir de valeur. La clé est d'utiliser un SqlMetaData constructeur pour cette colonne qui définit useServerDefault à true :

Selon cet article sur utilisation du type de table défini par l'utilisateur avec la colonne d'identification dans ado net par 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)