存储过程生成三个表,而我只想取第三个表来做为数据集,请问怎么做?

人生无回头路 2006-12-21 10:40:30
这是一个分页的存储过程,生成三个表,而数据集中的呈现表是第三个表,请问如何做呢?我是想在存储过程中返回第三个表,请问怎么做?
...全文
200 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
pkkfaii 2006-12-22
  • 打赏
  • 举报
回复
绑定到ds 上用 ds.tables[2] 取第三个结果集
blackant2 2006-12-22
  • 打赏
  • 举报
回复
/*SELECT Article.Art_ID, Article.Class_ID, Article.Title, Article.ViceTitle, Article.TitleImage,
Article.TitleImage_Height, Article.TitleImage_Width, Article.Content,
Article.recommend, Article.Comment, Article.Author, Article.FromWhere,
Article.CourtName, Article.pic_suffix, Article.pic_comments, Article.ArtSource,
Article.IsAllwaysOnTop, Article.IsAllowDiscuss, Article.ArtStatus, Article.IsRecommend,
Article.Keyword, Article.ReadCount, Article.day_edit, Article.Releasedate,
Article.User_ID, Article.checkup, IZ_User.UserName, MsgClass.ClassName
FROM Article
INNER JOIN MsgClass ON Article.Class_ID = MsgClass.Class_ID
LEFT OUTER JOIN IZ_User ON Article.User_ID = IZ_User.UserID
WHERE Article.ArtStatus=1 AND Article.Class_ID=77
ORDER BY Article.IsAllwaysOnTop DESC,
Article.ReleaseDate DESC
*/
--准备存储过程的参数
declare @pagesize int
declare @pageindex int
set @pagesize=50
set @pageindex=2

--这两个排序依据的字段类型不明,按名字猜的
declare @IsAllwaysOnTop bit
declare @ReleaseDate datetime
declare @rowcount int
--以下不判断参数的正确性,比如pageindex<=1或者pageindex>pagecount
set @rowcount=(@pageindex-1)*@pagesize
set rowcount @rowcount
--得到所需要记录第一条之前的标志
SELECT @IsAllwaysOnTop=IsAllwaysOnTop,@ReleaseDate=ReleaseDate
FROM Article
INNER JOIN MsgClass ON Article.Class_ID = MsgClass.Class_ID
WHERE Article.ArtStatus=1 AND Article.Class_ID=77
ORDER BY Article.IsAllwaysOnTop DESC,
Article.ReleaseDate DESC

--然后选取@pagesize条记录
set rowcount @pagesize
SELECT Article.Art_ID, Article.Class_ID, Article.Title, Article.ViceTitle, Article.TitleImage,
Article.TitleImage_Height, Article.TitleImage_Width, Article.Content,
Article.recommend, Article.Comment, Article.Author, Article.FromWhere,
Article.CourtName, Article.pic_suffix, Article.pic_comments, Article.ArtSource,
Article.IsAllwaysOnTop, Article.IsAllowDiscuss, Article.ArtStatus, Article.IsRecommend,
Article.Keyword, Article.ReadCount, Article.day_edit, Article.Releasedate,
Article.User_ID, Article.checkup, IZ_User.UserName, MsgClass.ClassName
FROM Article
INNER JOIN MsgClass ON Article.Class_ID = MsgClass.Class_ID
LEFT OUTER JOIN IZ_User ON Article.User_ID = IZ_User.UserID
WHERE Article.ArtStatus=1 AND Article.Class_ID=77
--加入条件,要比刚才的记录排在更后
AND Article.IsAllwaysOnTop>@IsAllwaysOnTop and Article.ReleaseDate>@ReleaseDate
ORDER BY Article.IsAllwaysOnTop DESC,
Article.ReleaseDate DESC


--个人不喜欢使用游标:)好象M$也是这样建议的
blackant2 2006-12-22
  • 打赏
  • 举报
回复
首先,你只需要"第三个"表中的数据,那么不应该将三个表都返回给.net
增加不必要的资源开支,你可以优化你的sql,只返回你需要的东西
现在去wc,一会儿过来看看
fcuandy 2006-12-22
  • 打赏
  • 举报
回复
昨天在sql版回过了.
magicmaster 2006-12-22
  • 打赏
  • 举报
回复
存储过程加三个输出参数存临时表名,把三个结果集放到三个临时表中,再从临时表中填充
smalladam 2006-12-22
  • 打赏
  • 举报
回复
直接 获取....

用dataset取出数据,读取的时候dataset.table[2]
dick78 2006-12-22
  • 打赏
  • 举报
回复
在存储过程的结尾处
select * from 表3
在.cs中直接获取数据放到dataset中.
ysen1984 2006-12-21
  • 打赏
  • 举报
回复
如果生成独立的三个表的话可以把结果放在一个DataTableCollection里面 然后读取
wangmingfan 2006-12-21
  • 打赏
  • 举报
回复
可以直接取表名,我做过了,不过方法嘛,我要到我的资料库看看代码才行,我很懒的,只知道理论,要代码只能拷贝了!!
lucky_yyx 2006-12-21
  • 打赏
  • 举报
回复
dataset.tables[2]
人生无回头路 2006-12-21
  • 打赏
  • 举报
回复
一般原来我们用三层的话,就是用代码写,如前面所说的,从dataset.tables[2]里面得到所要找的表,现在我用的是xsd,就是在app_code里面添加的数据集。
Xpengfee 2006-12-21
  • 打赏
  • 举报
回复
那个什么执行的存储过程都写的是啥呀?!
hnsjack 2006-12-21
  • 打赏
  • 举报
回复
哈哈.你要SQL里面嘛?我譵SQl里面不很熟悉.
你可以在写个存储过程调用,传递参数exec 存储过程名字 i

当设置i的值.用if语句完成.把查询数据给新建的存储过程的临时表.这个临时表就是你要东西了.
xray2005 2006-12-21
  • 打赏
  • 举报
回复
难以理解!
lizhizhe2000 2006-12-21
  • 打赏
  • 举报
回复
难以理解!
人生无回头路 2006-12-21
  • 打赏
  • 举报
回复
是这样的,我是用视图的数据集,就是生成的xsd的视图,2.0所特有的视图。我直接添加TableAdapter进去的
jamzh 2006-12-21
  • 打赏
  • 举报
回复
用dataset取出数据,读取的时候dataset.table[2]
cpp2017 2006-12-21
  • 打赏
  • 举报
回复
1 如果前两个表不用的话,就在存储过程中去掉那两个 select 语句.

2.如果其他地方要用的话,先用DataSet填充.然后 DataTable dt = ds.Tables[2];
人生无回头路 2006-12-21
  • 打赏
  • 举报
回复
存储过程如下:
分页的存储过程:
--用法:
-- EXEC GetRecordPage 'SELECT * FROM TAB WHERE ...... ',10,100
CREATE PROC GetRecordPage
@strSQL varchar(4000), --查询SQL语句字符串
@CurPageNum int=1, --要显示的第N页
@PageSize int=50 --每页行数
AS
SET NOCOUNT ON
DECLARE @P1 int, --P1是游标的id
@RowCount int,
@PageCount int,
@CurPage int
EXEC sp_cursoropen @P1 OUTPUT,@strSQL,@scrollopt=1,@ccopt=1,@RowCount=@RowCount OUTPUT
SET @PageCount = ceiling(1.0*@RowCount/@PageSize)
IF @CurPageNum>@PageCount
SET @CurPage = @PageCount
ELSE IF @CurPageNum<=0
SET @CurPage = 1
ELSE
SET @CurPage = @CurPageNum
SELECT @RowCount AS RsCount,@PageCount AS PageCount,@CurPage AS CurPage
SET @CurPageNum=(@CurPageNum-1)*@PageSize+1
EXEC sp_cursorfetch @P1,16,@CurPageNum,@PageSize
EXEC sp_cursorclose @P1
--SET NOCOUNT OFF
GO
这个是执行的存储过程:

exec GetRecordPage 'SELECT Article.Art_ID, Article.Class_ID, Article.Title, Article.ViceTitle, Article.TitleImage,
Article.TitleImage_Height, Article.TitleImage_Width, Article.Content,
Article.recommend, Article.Comment, Article.Author, Article.FromWhere,
Article.CourtName, Article.pic_suffix, Article.pic_comments, Article.ArtSource,
Article.IsAllwaysOnTop, Article.IsAllowDiscuss, Article.ArtStatus, Article.IsRecommend,
Article.Keyword, Article.ReadCount, Article.day_edit, Article.Releasedate,
Article.User_ID, Article.checkup, IZ_User.UserName, MsgClass.ClassName
FROM Article INNER JOIN
MsgClass ON Article.Class_ID = MsgClass.Class_ID LEFT OUTER JOIN
IZ_User ON Article.User_ID = IZ_User.UserID
WHERE Article.ArtStatus=1 AND Article.Class_ID=77 ORDER BY Article.IsAllwaysOnTop DESC, Article.ReleaseDate DESC'
,1,55
然后我希望在数据集中看到数据,可是数据为空,在查询分析器上执行的结果为三个表,只有第三个表才是我想要的,怎么做呢?
zdywqy 2006-12-21
  • 打赏
  • 举报
回复
jf
加载更多回复(4)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧