Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Identitätsspalte in einem Tabellenwertparameter in der Prozedur, wie man DataTable definiert

Ich hatte das gleiche Problem, wo wir eine Identität für den Typ wollen, aber keinen Wert angeben wollen. Der Schlüssel ist, ein SqlMetaData zu verwenden Konstruktor für diese Spalte, die useServerDefault festlegt auf true :

Laut diesem Artikel auf benutzerdefinierten Tabellentyp mit Identitätsspalte in ado net verwenden von 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)