Dapper: Einfügen von Zeilen in Tabellenvariablen

c# dapper insert sql table-variable

Frage

Ich habe in letzter Zeit Dapper verwendet und alles in allem hatte keine Probleme damit, außer wenn Sie Tabellenvariablen verwenden.

Zur Demonstration verwende ich ein modifiziertes Beispiel aus diesem Thread .

Dieser Code funktioniert ohne Probleme:

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"}
    });

Aber das ist nicht:

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"}
    });

Die einzige Änderung ist die Verwendung von Tabellenvariablen anstelle von temporären Tabellen ( @ instead # ). Dapper (oder irgendetwas anderes in der Kette?) @t irgendwie mit Parametern zu verwechseln und gibt "Muss die Tabellenvariable @t " zurück.

Ist etwas falsch in meiner Verwendung oder ist dies ein Fehler / fehlende Funktion in Dapper?

Mit freundlichen Grüßen, Kc


AKTUALISIEREN:

Nur um zu verdeutlichen: @t ist kein Parameter, der von @t gesetzt werden soll. @t wird als lokale Tabelle deklariert, die nur für die aktuell laufende Abfrage existiert. Meiner Meinung nach sollte dapper nicht zwischen irgendwelchen Tabellentypen unterscheiden, sei es eine "normale", eine lokale / globale temporäre Tabelle oder eine Tabellenvariable.

Ein bisschen mehr Hintergrundinformationen:

Was ich wirklich machen möchte ist:

  • Fügen Sie eine Liste von IDs in eine indizierte Tabellenvariable ein (oder eine temporäre Tabelle, wenn Tabellenvariablen nicht funktionieren)
  • JOIN diese Tabelle gegen eine meiner persistenten Tabellen und das Ergebnis zurückgeben.

Meine Absicht ist, ein Leistungsproblem zu besiegen, wenn ich aus meinen Tabellen mit einer Klausel WHERE IN (...) auswähle

Beliebte Antwort

Wenn Sie SQL Server verwenden, ist die Syntax falsch. In SQL Server werden Tabellenvariablen nicht auf die gleiche Weise wie reguläre Tabellen erstellt. Es sollte so sein:

DECLARE @t TABLE (
   -- table definition
);


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow