mysql怎么随机取50条数据
2个回答
2018-09-25 · 百度知道官方认证企业
腾讯电脑管家
腾讯电脑管家是腾讯公司推出的免费安全管理软件,能有效预防和解决计算机上常见的安全风险,并帮助用户解决各种电脑“疑难杂症”、优化系统和网络环境,是中国综合能力最强、最稳定的安全软件。
向TA提问
关注
展开全部
USE [2881]
GO
/****** Object: StoredProcedure [dbo].[sp_rowpages] Script Date: 06/12/2017 09:55:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Description: <>
-- Status: <>
-- =============================================
ALTER PROCEDURE [dbo].[sp_rowpages]
@TableName NVARCHAR(1024), /* 数据表名 */
@SQLFields NVARCHAR(1024) = NULL, /* 显示字段(支持多字段,以逗号分隔) */
@SQLWhere NVARCHAR(1024) = NULL, /* 查询条件 */
@OrderFields NVARCHAR(255) = NULL, /* 显示排序字段(支持排序字,多字段以逗号分隔) */
@PageSize INT = 10, /* 每页的大小(记录数) */
@PageIndex INT = 1, /* 页码 */
@RecordCount INT = NULL OUTPUT, /* 总记录数 */
@PageCount INT = NULL OUTPUT, /* 总页数 */
@SQLFields1 NVARCHAR(255) = NULL /* 特殊显示字符(函数计算),分页后包含,优化性能 */
AS
BEGIN
/* 分页数据查询(适用于SQL2005) */
/* 返回值: -1 参数错误或执行出错,0-无数据,>0 页记录数量 */
SET NOCOUNT ON
SET @TableName = RTRIM(@TableName)
IF (@TableName = '')
RETURN -1 /* 表名不能为空 */
SET @SQLFields = RTRIM(ISNULL(@SQLFields, N''))
IF (@SQLFields = N'')
SET @SQLFields = N'*'
SET @SQLFields1 = RTRIM(ISNULL(@SQLFields1, N''))
IF (@SQLFields1 <> N'')
SET @SQLFields1 = N', ' + @SQLFields1
SET @SQLWhere = RTRIM(ISNULL(@SQLWhere, N''))
SET @OrderFields = RTRIM(ISNULL(@OrderFields, N''))
IF (@OrderFields = N'')
RETURN -1 /* 主键字段和排序字段不能同时为空 */
DECLARE @SQL NVARCHAR(2048)
DECLARE @StartSQL DATETIME /* 查询开始时间 */
/* 计算总页数 */
SET @SQL = N''
IF (@PageCount IS NULL)
BEGIN
SET @StartSQL = GETDATE()
SET @RecordCount = 0
SET @PageCount = 0
SET @SQL = N'SELECT @RecordCount = COUNT(*) FROM ' + @TableName
IF NOT (@SQLWhere = N'')
SET @SQL = @SQL + N' WHERE '+ @SQLWhere
EXEC sp_executesql @SQL, N'@RecordCount int OUTPUT', @RecordCount OUTPUT
IF NOT (@@ERROR = 0)
RETURN -1 /* 取得记录数出错 */
SET @PageCount = (@RecordCount + @PageSize - 1) / @PageSize
PRINT 'Count Time: '+LTRIM(STR(DATEDIFF(ms,@StartSQL, GETDATE()))) + N' (ms).'
IF (@RecordCount = 0)
RETURN 0 /* 无数据,返回0 */
END
/* 处理页数范围 */
IF @PageCount <= 0
RETURN 0 /* 无数据,返回0 */
IF ISNULL(@PageSize, 0) < 1 SET @PageSize = 20
IF ISNULL(@PageIndex, 0) < 1 SET @PageIndex = 1
IF (@PageIndex > @PageCount) SET @PageIndex = @PageCount
/* 分页数据查询 */
SET @SQL = N''
-- IF (@PageIndex = 1)
-- BEGIN
-- /* 第1页的查询 */
-- SET @StartSQL = GETDATE()
-- SET @SQL = N'SELECT TOP (' + LTRIM(STR(@PageSize)) + ') '+ @SQLFields
-- + N' FROM ' + @TableName
-- IF NOT (@SQLWhere = N'')
-- SET @SQL = @SQL + N' WHERE '+ @SQLWhere
-- SET @SQL = @SQL + N' ORDER BY '+ @OrderFields
-- --PRINT N'查询语句长度: ' + LTRIM(STR(LEN(@SQL)))
-- PRINT CASE WHEN (@SQL IS NULL) THEN 'SQL IS NULL!' ELSE @SQL END
-- EXEC sp_executesql @SQL, N'@PageSize int', @PageSize
-- END
-- ELSE
BEGIN
/* 第N页的查询 */
SET @StartSQL = GETDATE()
/* 处理分页起止点 */
DECLARE @PageStart INT, @PageEnd INT
SET @PageStart = (@PageIndex -1) * @PageSize + 1
SET @PageEnd = @PageStart + @PageSize - 1
/* 合成分页查询语句 */
SET @SQL = N'SELECT *' + @SQLFields1 + N' FROM (SELECT ROW_NUMBER() OVER(ORDER BY '
+ @OrderFields + N') AS RowId,'
+ @SQLFields + N' FROM ' + @TableName
IF NOT (@SQLWhere = N'')
SET @SQL = @SQL + N' WHERE ' + @SQLWhere
SET @SQL = @SQL + N') AS tbl WHERE RowId BETWEEN '
+ LTRIM(CONVERT(VARCHAR(50), @PageStart)) + N' AND '
+ LTRIM(CONVERT(VARCHAR(50), @PageEnd)) + N' ORDER BY RowId'
--PRINT N'查询语句长度: ' + LTRIM(STR(LEN(@SQL)))
PRINT CASE WHEN (@SQL IS NULL) THEN 'SQL IS NULL!' ELSE @SQL END
EXEC sp_executesql @SQL, N'@PageSize int, @PageIndex int', @PageSize, @PageIndex
END
DECLARE @RETURN int, @ERROR int
SELECT @RETURN = @@ROWCOUNT, @ERROR = @@ERROR
IF NOT (@ERROR = 0)
RETURN -1 /* 分页查询执行出错 */
PRINT N'Query Time: ' + LTRIM(STR(DATEDIFF(ms, @StartSQL, GETDATE()))) + N' (ms).'
RETURN @RETURN
END
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询