Dapper:テーブル変数に行を挿入する

c# dapper insert sql table-variable

質問

私は最近、 dapperを使用していて、テーブル変数を使用する場合を除いて、すべてに問題はありませんでした。

デモンストレーションのために、私はこのスレッドの変更された例を使用します

このコードは問題なく動作します:

int tally = connection.Execute(
    "create table #t(Name nvarchar(max), Age int)\n" +
    "insert #t (Name,Age) values(@Name, @Age)", new[]
    {
        new {Age = 1, Name = "sam"},
        new {Age = 2, Name = "bob"}
    });

しかし、これはしません:

int tally = connection.Execute(
    "create table @t(Name nvarchar(max), Age int)\n" +
    "insert @t (Name,Age) values(@Name, @Age)", new[]
    {
        new {Age = 1, Name = "sam"},
        new {Age = 2, Name = "bob"}
    });

唯一の変更は、テンポラリテーブル( @ instead # )の代わりにテーブル変数を使用することです。 Dapper(またはチェーン内の他の何か)は、これを何らかの形でパラメータと混在させているように見えます。「テーブル変数@t宣言しなければなりません。

私の使い方に何か間違っているのですか?これはバッパー/ダッパーの機能が欠けていますか?

最高の、KCを


更新:

明確にするために、 @tはdapperによって設定されるパラメータではありません。 @tは現在実行中のクエリに対してのみ存在するローカルテーブルとして宣言されます。私の意見では、dapperは、どのようなタイプのテーブルを区別してはいけません。通常のものか、ローカル/グローバルな一時テーブルか、テーブル変数かです。

背景情報をもっと少し:

私が本当にやりたいことは:

  • インデックス付きテーブル変数(またはテーブル変数が機能しない場合は一時テーブル)にIdのリストを挿入する
  • 私の永続的なテーブルの1つに対してこのテーブルを結合し、結果を返します。

私の意図は、WHERE IN(...)句を使用してテーブルから選択するときにパフォーマンスの問題を克服することです

人気のある回答

SQL Serverを使用している場合、構文は正しくありません。 SQL Serverでは、テーブル変数は通常のテーブルと同じ方法で作成されません。それは次のようにすべきです:

DECLARE @t TABLE (
   -- table definition
);


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow