这里记录些许个会经常用到的sql语句。
P.S. [Your_Table] = 你的表名, [nid] = 你表中的主键唯一列.
/*按分页数量取表记录中的数据*/ /*以nid排序, 取20条之后的10条*/SELECT TOP 10 * FROM Your_Table WHERE (nid NOT IN (SELECT TOP 20 nid FROM Your_Table ORDER BY nid)) ORDER BY nid
/*取传入条件记录的前一条数据*/ /*取 nid='533' 记录的前一条, 返回记录 nid='532'*/ SELECT * FROM Your_Table WHERE (nid = (SELECT MAX(nid) FROM Your_Table WHERE nid < 533))
/*取传入条件记录的后一条数据*/ /*取 nid='533' 记录的后一条, 返回记录 nid='532'*/ SELECT * FROM Your_Table WHERE (nid = (SELECT MIN(nid) FROM Your_Table WHERE nid > 534))
分页存储过程,SQL 2000 数据库下使用的:
-- ============================================= -- DocumentName 分页存储过程 SQL 2000数据库下使用的 -- 描述 利用SQL查询语句进行分页 -- 输入 -- { -- @SQL : SQL查询语句,示例:'Select * from [TableName]' -- @Order : 排序,示例:[ColumnName] [ASC | DESC] -- @CurPage : 当前页,示例:0..9 -- @PageRows : 每页显示的行数,示例:0..9 -- @TotalRecorder: 查询记录总数(输出参数) -- @IsXML : 表示返回的结果,0表示以表格形式记录,1表示以XML格式返回记录;默认为0 -- } -- ============================================= ALTER PROCEDURE [dbo].[SeparatePage] -- Add the parameters for the stored procedure here @SQL Nvarchar(2000), @Order Nvarchar(20), @CurPage int, @PageRows int, @TotalRecorder int output, @IsXML bit = 0 AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from SET NOCOUNT ON; declare @ExceSQL nvarchar(4000) --设置开始行号 declare @start_row_num AS int SET @start_row_num = (@CurPage - 1) * @PageRows if @CurPage > 1 BEGIN SET @start_row_num = @start_row_num + 1; SET @PageRows = @PageRows - 1 END else SET @start_row_num = @start_row_num --获取总记录数 set @ExceSQL = 'SELECT tb.* into [tb_Temp] FROM ('+ @SQL +') tb ORDER BY'+ @order execute(@ExceSQL) SELECT @TotalRecorder = COUNT(*) from [tb_Temp] ALTER TABLE [tb_Temp] add [RowNumber] int --设置查询语句 SET @ExceSQL = 'SELECT TOP '+ convert(varchar(10),@PageRows) +' * FROM (SELECT TOP '+ convert(varchar(10),@PageRows) +' * FROM (SELECT TOP '+ convert(varchar(10),@TotalRecorder-@start_row_num+1) +' * FROM [tb_Temp] ORDER BY '+ REPLACE(@Order,'DESC','ASC') +') AS a ORDER BY '+ REPLACE(@Order,'ASC','DESC') +') AS b' IF(@IsXML = 1) SET @ExceSQL = @ExceSQL + ' FOR XML AUTO,ELEMENTS' EXECUTE(@ExceSQL) DROP Table [tb_Temp] END
分页存储过程,SQL 2005 数据库下使用的:
set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go -- ============================================= -- DocumentName 分页存储过程 SQL 2005数据库下使用 -- 描述 利用SQL查询语句进行分页 -- 输入 -- { -- @SQL : SQL查询语句,示例:'Select * from [TableName]' -- @Order : 排序,示例:[ColumnName] [ASC | DESC] -- @CurPage : 当前页,示例:0..9 -- @PageRows : 每页显示的行数,示例:0..9 -- @TotalRecorder: 查询记录总数(输出参数) -- @IsXML : 表示返回的结果,0表示以表格形式记录,1表示以XML格式返回记录;默认为0 -- } -- ============================================= ALTER PROCEDURE [dbo].[SeparatePage] -- Add the parameters for the stored procedure here @SQL Nvarchar(2000), @Order Nvarchar(20), @CurPage int, @PageRows int, @TotalRecorder int output, @IsXML bit = 0 AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from SET NOCOUNT ON; declare @ExceSQL nvarchar(4000) --设置开始行号 declare @start_row_num AS int SET @start_row_num = (@CurPage - 1) * @PageRows if @CurPage > 1 BEGIN SET @start_row_num = @start_row_num + 1; SET @PageRows = @PageRows - 1 END else SET @start_row_num = @start_row_num --设置标签语句 declare @RowNumber nvarchar(100) set @RowNumber = ', ROW_NUMBER() OVER(ORDER BY ' + @Order + ') as RowNumber from ' set @SQL = Replace(@SQL,' from ',@RowNumber) --获取总记录数 set @ExceSQL = 'WITH [TempTable] AS (' + @SQL + ') select @TotalRecorder=max(RowNumber) from [TempTable]' execute sp_executesql @ExceSQL,N'@TotalRecorder int output',@TotalRecorder output --设置查询语句 set @ExceSQL = 'WITH [TempTable] AS (' + @SQL + ') select * from [TempTable] where RowNumber between ' + Convert(nvarchar,@start_row_num) + ' And ' + Convert(nvarchar,@start_row_num+@PageRows) IF(@IsXML = 1)SET @ExceSQL = @ExceSQL + 'FOR XML AUTO,ELEMENTS' execute(@ExceSQL) END