Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Colonna Identity in un parametro con valori di tabella nella procedura, come definire DataTable

Ho avuto lo stesso problema in cui vogliamo un'identità sul tipo, ma non vogliamo fornire un valore. La chiave è usare un SqlMetaData costruttore per quella colonna che imposta useServerDefault su true :

Secondo questo articolo su utilizzando il tipo di tabella definito dall'utente con la colonna di identificazione in ado net di 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)