gpt4 book ai didi

c# - Dapper:将行插入表变量

转载 作者:行者123 更新时间:2023-11-30 14:57:17 24 4
gpt4 key购买 nike

我最近一直在使用 dapper,总而言之,除了使用表变量时,它没有任何问题。

为了演示,我使用了 this thread 中的修改示例.

这段代码没有问题:

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

唯一的变化是使用表变量代替临时表(@代替#)。Dapper(或链中的其他任何东西?)似乎以某种方式将其与参数混合并返回“必须声明表变量 @t”。

我的使用有什么问题吗?或者这是 dapper 中的错误/缺失功能?

最好的问候,Kc


更新:

澄清一下:@t 不是 dapper 可以设置的参数。 @t 被声明为仅对当前运行的查询存在的本地表。在我看来,dapper 不应该区分任何类型的表,无论是“普通”表、本地/全局临时表还是表变量。

更多背景信息:

我真正想做的是:

  • 将 ID 列表插入索引表变量(如果表变量不起作用,则可能是临时表)
  • JOIN 此表与我的其中一个持久表并返回结果。

我的目的是在使用 WHERE IN (...) 子句从我的表中进行选择时解决性能问题

最佳答案

如果您使用的是 SQL Server,则语法不正确。在 SQL Server 中,表变量的创建方式与常规表不同。应该是这样的:

DECLARE @t TABLE (
-- table definition
);

关于c# - Dapper:将行插入表变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21060686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com