sql >> データベース >  >> RDS >> Sqlserver

EntityFrameworkを介してテーブルの値の型をSQLServerストアドプロシージャに渡す

    GUIDの単一の列を持つテーブルを送信するとします。

    まず、 SqlMetaData これは、テーブル(列)のスキーマを表します。

    次のコードは、GUIDの「Id」という名前の1つの列がSQLストアドプロシージャパラメータテーブルタイプであることを示しています

    var tableSchema = new List<SqlMetaData>(1)
    {
      new SqlMetaData("Id", SqlDbType.UniqueIdentifier)
    }.ToArray();
    

    次に、 SqlDataRecord

    以下のコードは、上記で作成したスキーマを使用してリスト内にアイテムを追加する方法を示しています。リスト内のアイテムごとに新しいSqlDataRecordを作成します。 SetGuidを対応するタイプに置き換え、Guid.NewGuid()を対応する値として置き換えます。各アイテムに対して新しいSqlDataRecordを繰り返し、それらをリストに追加します

    var tableRow = new SqlDataRecord(tableSchema);
    tableRow.SetGuid(0, Guid.NewGuid());
    var table = new List<SqlDataRecord>(1)
    {
      tableRow
    };
    

    次に、SqlParameterを作成します。

    var parameter = new SqlParameter();
    parameter.SqlDbType = SqlDbType.Structured;
    parameter.ParameterName = "@UserIds"; //@UserIds is the stored procedure parameter name
    parameter.TypeName = "{Your stored procedure type name}"
    parameter.Value = table;
    
    var parameters = new SqlParameter[1]
    {
      parameter
    };
    

    次に、データベースを使用してストアドプロシージャを呼び出すだけです。 .SqlQuery

    IEnumerable<ReturnType> result;
    using (var myContext = new DbContext())
    {
      result = myContext.Database.SqlQuery<User>("GetUsers @UserIds", parameters)
        .ToList();         // calls the stored procedure
        // ToListAsync();  // Async
    {
    

    SQL Serverで、ユーザー定義のテーブルタイプを作成します(TTV、テーブルタイプの値でサフィックスを付けます):

    CREATE TYPE [dbo].[UniqueidentifiersTTV] AS TABLE(
      [Id] [uniqueidentifier] NOT NULL
    )
    GO
    

    次に、タイプをパラメーターとして指定します(テーブルタイプの値は読み取り専用である必要があることを忘れないでください!):

    CREATE PROCEDURE [dbo].[GetUsers] (
      @UserIds [UniqueidentifiersTTV] READONLY
    ) AS
    BEGIN
      SET NOCOUNT ON
    
      SELECT u.* -- Just an example :P
      FROM [dbo].[Users] u
      INNER JOIN @UserIds ids On u.Id = ids.Id
    END
    


    1. MAMPmysqlサーバーが起動しません。 mysqlプロセスは実行されていません

    2. Glassfish管理コンソールは、JDBCプールの作成時にjava.lang.IllegalStateExceptionをスローします

    3. 同じ条件値で別のテーブルの値を結合する方法

    4. SQLリファレンステーブル:基本的なクエリを作成および作成する方法