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被聲明為本@t ,該表僅存在於當前運行的查詢中。在我看來,dapper不應該區分任何類型的表,無論是“普通”表,本地/全局臨時表還是表變量。

更多背景信息:

我真正想做的是:

  • 將Ids列表插入索引表變量(如果表變量不起作用,則可能是臨時表)
  • 將此表連接到我的一個持久表並返回結果。

我的目的是在從帶有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