在存储过程中使用多个视图

时间:2012-08-02 19:05:10

标签: sql-server stored-procedures views

是否可以从存储过程中的多个视图中进行选择?我试过了,但无济于事。我觉得好像是因为我的实施是错误的。这是我的代码,如果有人想看一看。当我将这个sp添加到linq设计器并生成一个结果类时,它只有从savedarticle_v视图中选择的字段,而不是tag_v。

   ALTER PROCEDURE [dbo].[mobile_GetSavedArticlesAR] 
  -- Add the parameters for the stored procedure here
  @UserID int , 

  @keyword1 varchar(50)='',
  @keyword2 varchar(50)='',
  @keyword3 varchar(50)='',
  @keyword4 varchar(50)='',
  @keyword5 varchar(50)='',
  @Page int=1,
  @PageLen int=20

AS
BEGIN
  -- SET NOCOUNT ON added to prevent extra result sets from
  -- interfering with SELECT statements.
  SET NOCOUNT ON;

    -- Insert statements for procedure here
  declare @RowStart int
  declare @RowEnd int
  IF (@Page=1)
    Begin

      set @RowStart=(@Page-1)*(@PageLen)
      set @RowEnd=(@RowStart+@PageLen);
    END
  ELSE
    BEGIN

      set @RowStart=((@Page-1)*(@PageLen))+1
      set @RowEnd=((@RowStart+@PageLen))-1
    END;
    With myArticles as 
(select ROW_NUMBER() over (ORDER BY userID DESC) as 'RowNumber',*

From savedarticle_v
where UserID=@UserID and
title like '%'+@keyword1+'%' and
title like '%'+@keyword2+'%' and
title like '%'+@keyword3+'%' and
title like '%'+@keyword4+'%' and
title like '%'+@keyword5+'%' 
)


    select 
      rownumber,journalID,journalname,articleID,title,publicationdate,likes,aviews,comments ,medabbr
      from  myArticles where RowNumber Between @RowStart  and @RowEnd;

With myTags as
(select ROW_NUMBER() over (ORDER BY userID DESC) as 'RowNumber',*

From tags_v
where userID=@UserID
)
    select tagtext from myTags where RowNumber Between @RowStart and @RowEnd
END



GO 

2 个答案:

答案 0 :(得分:2)

这与视图无关,但与您拥有多个结果集存储过程的事实无关。

this blog post

中描述了从Linq-to-Sql处理多个结果集的方法

答案 1 :(得分:0)

LINQ设计器本身不支持多个行集。

读取多个结果集的可靠方法是使用SqlDataReader方法的常规ADO.NET NextResult

比LINQ更好的ORM是Dapper。它使用QueryMultiple方法支持多个结果集。