【问题标题】:Stored Procedure has void type instead of returning my desired result存储过程具有 void 类型,而不是返回我想要的结果
【发布时间】:2013-06-24 22:20:00
【问题描述】:

这是我的存储过程实现:

ALTER procedure [dbo].[ShowProjectByNameOfPerson]
(@name as nvarchar)
as begin

select   Personality.id,COUNT(*) as cnt into  #test 
 from Personality,Project,Personal_project
where Personality.Id = Personal_project.PersonalityId_FK
and Project.Id = Personal_project.ProjectId_FK
and Personality.FullName like N'%'+@name+'%'
group by Personality.Id
order by cnt desc
select * from #test,Personality
where #test.id = Personality.id
end

我在我的 ASP.Net 项目中创建了 Linq ToSQL 类项。我将过程分配给了 DBML 文件。 但是当我想在创建上下文实例后使用该过程时,我得到了这个错误:

Cannot assign void to an implicitly-typed local variable

No overload for method 'ShowProjectByNameOfPerson' 

这是.cs文件中存储过程的调用代码:

DataClassesDataContext db = new DataClassesDataContext();
var lst = db.ShowProjectByNameOfPerson(txt);

我该如何解决这个问题?

感谢高级。

【问题讨论】:

  • 在存储过程中使用“select *”是一种不好的做法。如果表被更改,您的程序将无法知道它并且将失败。如果您专门调用列,则更改不会破坏您的程序。
  • 您是否在程序中使用了可为空的类型变量?

标签: asp.net sql-server linq stored-procedures


【解决方案1】:

您对各种 t-sql 函数类型感到困惑。

你想要的是:

create function [dbo].[ShowProjectByNameOfPerson] (@name as nvarchar)
returns table
as return (
  select
    Personality.Id, Personality.FullName, 
    COUNT(*) as cnt
  from Personality
  inner join Personal_project 
    on Personality.Id = Personal_project.PersonalityId_FK
  where Personality.FullName like N'%' + @name + N'%'
  group by Personality.Id, Personality.FullName
  order by cnt desc
);

请参阅 MSDN 参考以了解语法变化及其含义: http://msdn.microsoft.com/en-us/library/ms186755.aspx

此外,您应该尽量避免不必要地使用临时表(请参阅我如何更改您的代码)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    相关资源
    最近更新 更多