Dapper: insertion de lignes dans les variables de table

c# dapper insert sql table-variable

Question

J'ai récemment utilisé dapper et dans l'ensemble, il n'y avait pas de problèmes avec cela, sauf en utilisant des variables de table.

Pour démonstration, j'utilise un exemple modifié de ce thread .

Ce code fonctionne sans problèmes:

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

Mais ce n'est pas le cas:

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

Le seul changement est l'utilisation de variables de table à la place de tables temporaires ( @ instead # ). Dapper (ou autre chose dans la chaîne?) Semble en quelque sorte mélanger les paramètres et renvoie "Doit déclarer la variable de table @t ".

Y a-t-il quelque chose qui cloche dans mon utilisation ou est-ce une fonctionnalité de bogue / manquant dans dapper?

Cordialement, Kc


METTRE À JOUR:

Juste pour clarifier: @t n'est pas un paramètre à définir par dapper. @t est déclaré comme une table locale qui n'existe que pour la requête en cours d'exécution. À mon avis, Dapper ne devrait pas faire la distinction entre les types de tables, que ce soit une table "normale", une table temporaire locale / globale ou une variable de table.

Un peu plus d'informations de base:

Ce que je veux vraiment faire c'est:

  • Insérer une liste d'ID dans une variable de table indexée (ou peut-être une table temporaire si les variables de table ne fonctionnent pas)
  • REJOIGNEZ cette table contre une de mes tables persistantes et renvoyez le résultat.

Mon intention est de vaincre un problème de performance lors de la sélection de mes tables avec une clause WHERE IN (...)

Réponse populaire

Si vous utilisez SQL Server, la syntaxe est incorrecte. Dans SQL Server, les variables de table ne sont pas créées de la même manière que les tables normales. Ça devrait être comme ça:

DECLARE @t TABLE (
   -- table definition
);



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi