我不完全了解发生了什么,但是我可以通过在自己的Execute中创建临时表来解决此问题,而不是像在代码中同时创建表和填充表的Execute中那样显示在我的问题中。
即,以下工作:
connection.Execute(@" create table #PagesOfUsers(row int,EmailAddress nvarchar(max),LastName nvarchar(max),FirstName nvarchar(max),Id uniqueidentifier)" ); connection.Execute(@" insert into #PagesOfUsers SELECt ROW_NUMBER() OVER (order by LastName, FirstName, EmailAddress) row, EmailAddress, LastName, FirstName, Id FROM Users WHERe LastName like @search or FirstName like @search or EmailAddress like @search ", new { search = search } ); int count = connection.Query<int>(@" SELECt count(*) from #PagesOfUsers ").Single<int>();
这并不可怕,但是很不方便。值得注意的是,我宁愿根本不必 _显式_创建临时表。确实,我最初将create / populate *** 作编码为SELECT
INTO,因此不必逐项列出临时表的列。但这在随后的查询中也遇到了“无效对象”错误,因此我尝试使用显式的CREATETABLE来查看它是否有所作为,并在发现问题后在此处张贴了我的问题。
我看到的行为是,当在同一Execute中创建并填充临时表时,表面看来成功后,实际上并没有在tempdb中。这让我想知道原始代码中的Execute是否在做任何事情!据我所知,这相当于没有采取任何行动。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)