2013-06-24 38 views
1

這是我的存儲過程執行:存儲過程有void類型,而不是返回我期望的結果

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'%'[email protected]+'%' 
group by Personality.Id 
order by cnt desc 
select * from #test,Personality 
where #test.id = Personality.id 
end 

我在ASP.Net創建的LINQ ToSQL類項目project.and我分配的過程將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); 

哪有我解決這個問題?

感謝高級。

+1

在存儲過程中使用「select *」是個不好的做法。如果表格被改變了,你的程序就無法知道它並且會失敗。如果您專門調出列,則更改不會破壞您的程序。 – Jay

+0

你在程序中使用可空的類型變量嗎? – Jay

回答

3

你對各種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

此外,你應該儘量避免使用臨時表不必要的(怎麼看我改變你的代碼)。

相關問題