存储过程生成三个表,而我只想取第三个表来做为数据集,请问怎么做? 这是一个分页的存储过程,生成三个表,而数据集中的呈现表是第三个表,请问如何做呢?我是想在存储过程中返回第三个表,请问怎么做? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果执行存储过程返回是个Dataset..是这样的Ds.Tables[i];i是从零开始的.0是第一个表.1是第二个表.2是第三个表.一次类推 在DataSet里面是分表存放的,你到时候取第三个表的数据就可以了就像楼上说的 存储过程如下:分页的存储过程:--用法:-- EXEC GetRecordPage 'SELECT * FROM TAB WHERE ...... ',10,100CREATE 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 OFFGO这个是执行的存储过程: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.ClassNameFROM 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然后我希望在数据集中看到数据,可是数据为空,在查询分析器上执行的结果为三个表,只有第三个表才是我想要的,怎么做呢? 1 如果前两个表不用的话,就在存储过程中去掉那两个 select 语句.2.如果其他地方要用的话,先用DataSet填充.然后 DataTable dt = ds.Tables[2]; 用dataset取出数据,读取的时候dataset.table[2] 是这样的,我是用视图的数据集,就是生成的xsd的视图,2.0所特有的视图。我直接添加TableAdapter进去的 哈哈.你要SQL里面嘛?我譵SQl里面不很熟悉.你可以在写个存储过程调用,传递参数exec 存储过程名字 i当设置i的值.用if语句完成.把查询数据给新建的存储过程的临时表.这个临时表就是你要东西了. 一般原来我们用三层的话,就是用代码写,如前面所说的,从dataset.tables[2]里面得到所要找的表,现在我用的是xsd,就是在app_code里面添加的数据集。 如果生成独立的三个表的话可以把结果放在一个DataTableCollection里面 然后读取 在存储过程的结尾处select * from 表3 在.cs中直接获取数据放到dataset中. 直接 获取....用dataset取出数据,读取的时候dataset.table[2] 首先,你只需要"第三个"表中的数据,那么不应该将三个表都返回给.net增加不必要的资源开支,你可以优化你的sql,只返回你需要的东西现在去wc,一会儿过来看看 /*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.ClassNameFROM Article INNER JOIN MsgClass ON Article.Class_ID = MsgClass.Class_ID LEFT OUTER JOIN IZ_User ON Article.User_ID = IZ_User.UserIDWHERE Article.ArtStatus=1 AND Article.Class_ID=77 ORDER BY Article.IsAllwaysOnTop DESC, Article.ReleaseDate DESC*/--准备存储过程的参数declare @pagesize intdeclare @pageindex intset @pagesize=50set @pageindex=2--这两个排序依据的字段类型不明,按名字猜的declare @IsAllwaysOnTop bitdeclare @ReleaseDate datetimedeclare @rowcount int--以下不判断参数的正确性,比如pageindex<=1或者pageindex>pagecountset @rowcount=(@pageindex-1)*@pagesizeset rowcount @rowcount--得到所需要记录第一条之前的标志SELECT @IsAllwaysOnTop=IsAllwaysOnTop,@ReleaseDate=ReleaseDateFROM Article INNER JOIN MsgClass ON Article.Class_ID = MsgClass.Class_ID WHERE Article.ArtStatus=1 AND Article.Class_ID=77ORDER BY Article.IsAllwaysOnTop DESC, Article.ReleaseDate DESC--然后选取@pagesize条记录set rowcount @pagesizeSELECT 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.ClassNameFROM Article INNER JOIN MsgClass ON Article.Class_ID = MsgClass.Class_ID LEFT OUTER JOIN IZ_User ON Article.User_ID = IZ_User.UserIDWHERE 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$也是这样建议的 绑定到ds 上用 ds.tables[2] 取第三个结果集 session有关问题 SQL數據庫中的數據寫入xml檔的請教 初学者求助了。。。 非常简单的数据插入问题。 怎样知道页面的当前回传是由哪个事件引起的? aspose.excel 报表控件 虚心请教,ASP.NET存储过程读取output跟return的问题 jquery ajax.post 不成功 请教关于多表查询sql语句问题? 请问怎样在asp.net下把object转为byte[]? 在字符窜中去掉所有格式,怎么解决? 来不及了,哪位兄弟姐妹帮忙解决一个中文转数字的问题,给够50分
i是从零开始的.0是第一个表.1是第二个表.2是第三个表.一次类推
分页的存储过程:
--用法:
-- 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
然后我希望在数据集中看到数据,可是数据为空,在查询分析器上执行的结果为三个表,只有第三个表才是我想要的,怎么做呢?
你可以在写个存储过程调用,传递参数exec 存储过程名字 i当设置i的值.用if语句完成.把查询数据给新建的存储过程的临时表.这个临时表就是你要东西了.
select * from 表3
在.cs中直接获取数据放到dataset中.
增加不必要的资源开支,你可以优化你的sql,只返回你需要的东西
现在去wc,一会儿过来看看
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$也是这样建议的