些许会常用到的sql语句

这里记录些许个会经常用到的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

 

Sql时间转varchar字符串

 

CONVERT(data_type,expression_r_r[,style])

语句及查询结果:

SELECT CONVERT(varchar(100), GETDATE_r(), 0): 05 16 2006 10:57AM

SELECT CONVERT(varchar(100), GETDATE_r(), 1): 05/16/06

SELECT CONVERT(varchar(100), GETDATE_r(), 2): 06.05.16

SELECT CONVERT(varchar(100), GETDATE_r(), 3): 16/05/06

SELECT CONVERT(varchar(100), GETDATE_r(), 4): 16.05.06

SELECT CONVERT(varchar(100), GETDATE_r(), 5): 16-05-06

SELECT CONVERT(varchar(100), GETDATE_r(), 6): 16 05 06

SELECT CONVERT(varchar(100), GETDATE_r(), 7): 05 16, 06

SELECT CONVERT(varchar(100), GETDATE_r(), 8): 10:57:46

SELECT CONVERT(varchar(100), GETDATE_r(), 9): 05 16 2006 10:57:46:827AM

SELECT CONVERT(varchar(100), GETDATE_r(), 10): 05-16-06

SELECT CONVERT(varchar(100), GETDATE_r(), 11): 06/05/16

SELECT CONVERT(varchar(100), GETDATE_r(), 12): 060516

SELECT CONVERT(varchar(100), GETDATE_r(), 13): 16 05 2006 10:57:46:937

SELECT CONVERT(varchar(100), GETDATE_r(), 14): 10:57:46:967

SELECT CONVERT(varchar(100), GETDATE_r(), 20): 2006-05-16 10:57:47

SELECT CONVERT(varchar(100), GETDATE_r(), 21): 2006-05-16 10:57:47.157

SELECT CONVERT(varchar(100), GETDATE_r(), 22): 05/16/06 10:57:47 AM

SELECT CONVERT(varchar(100), GETDATE_r(), 23): 2006-05-16

SELECT CONVERT(varchar(100), GETDATE_r(), 24): 10:57:47

SELECT CONVERT(varchar(100), GETDATE_r(), 25): 2006-05-16 10:57:47.250

SELECT CONVERT(varchar(100), GETDATE_r(), 100): 05 16 2006 10:57AM

SELECT CONVERT(varchar(100), GETDATE_r(), 101): 05/16/2006

SELECT CONVE

Sql Server 查询全库表信息

通过(sys.sysobjects)对象表,查询全库表的基础信息 :

SELECT name AS 对象名, info AS 字段数, 
      CASE WHEN xtype = 'C' THEN 'CHECK 约束' WHEN xtype = 'D' THEN '默认值约束' WHEN
       xtype = 'F' THEN '外键约束' WHEN xtype = 'L' THEN '日志' WHEN xtype = 'FN' THEN '标量函数'
       WHEN xtype = 'IF' THEN '内嵌表函数' WHEN xtype = 'P' THEN '存储过程' WHEN xtype
       = 'PK' THEN '主键约束(类型是 K)' WHEN xtype = 'RF' THEN '复制筛选存储过程' WHEN
       xtype = 'S' THEN '系统表' WHEN xtype = 'TF' THEN '表函数' WHEN xtype = 'TR' THEN
       '触发器' WHEN xtype = 'U' THEN '用户表' WHEN xtype = 'UQ' THEN '唯一约束(类型是 K)'
       WHEN xtype = 'V' THEN '视图' WHEN xtype = 'X' THEN '扩展存储过程' END AS 对象类型,
       CASE WHEN ftcatid = 0 THEN '否' WHEN ftcatid = 1 THEN '是' END AS 索引, 
      crdate AS 创建日期, CONVERT(char(19), getdate(), 120) AS 本次索引时间
FROM sysobjects
ORDER BY name

======================

这里查询的包含了系统表,如果要过滤掉系统表请加上where条件!

如只要用户表和用户视图: WHERE   (xtype = ‘U’) or (xtype = ‘V’)

xtype 可以是以下对象类型之一:

AF = 聚合函数 (CLR)

C = CHECK 约束

D = 默认值或 DEFAULT 约束

F = FOREIGN KEY 约束

L = 日志

FN = 标量函数

FS = 程序集 (CLR) 标量函数

FT = 程序集 (CLR) 表值函数

IF = 内联表函数

IT = 内部表

P = 存储过程

PC = 程序集 (CLR) 存储过程

PK = PRIMARY KEY 约束(类型为 K)

RF = 复制筛选存储过程

S = 系统表

SN = 同义词

SQ = 服务队列

TA = 程序集 (CLR) DML 触发器

TF = 表函数

TR = SQL DML 触发器

TT = 表类型

U = 用户表

UQ = UNIQUE 约束(类型为 K)

V = 视图

X = 扩展存储过程

 

================================================================================

重要提示: 将此 SQL Server 2000 系统表作为一个视图包含进来是为了保持向后兼容性。建议您改用当前的 SQL Server 系统视图。若要查找一个或多个等效系统视图,请参阅将 SQL Server 2000 系统表映射到 SQL Server 2005 系统视图。后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。

列名 数据类型 说明

name

sysname

对象名

id

int

对象标识号

xtype

char(2)

对象类型。可以是以下对象类型之一:

AF = 聚合函数 (CLR)

C = CHECK 约束

D = 默认值或 DEFAULT 约束

F = FOREIGN KEY 约束

L = 日志

FN = 标量函数

FS = 程序集 (CLR) 标量函数

FT = 程序集 (CLR) 表值函数

IF = 内联表函数

IT = 内部表

P = 存储过程

PC = 程序集 (CLR) 存储过程

PK = PRIMARY KEY 约束(类型为 K)

RF = 复制筛选存储过程

S = 系统表

SN = 同义词

SQ = 服务队列

TA = 程序集 (CLR) DML 触发器

TF = 表函数

TR = SQL DML 触发器

TT = 表类型

U = 用户表

UQ = UNIQUE 约束(类型为 K)

V = 视图

X = 扩展存储过程

uid

smallint

对象所有者的架构 ID。

对于从旧版 SQL Server 升级的数据库,架构 ID 等于所有者的用户 ID。

ms177596.note(zh-cn,SQL.105).gif重要提示: 如果使用以下任何一个 SQL Server DDL 语句,则必须使用 sys.objects 目录视图而不是 sys.sysobjects。 CREATE | ALTER | DROP USER CREATE | ALTER | DROP ROLE CREATE | ALTER | DROP APPLICATION ROLE CREATE SCHEMA ALTER AUTHORIZATION ON OBJECT

 

如果用户数和角色数超过 32,767,则发生溢出或返回 NULL。

有关详细信息,请参阅查询 SQL Server 系统目录。

info

smallint

标识为仅供参考。不提供支持。不保证以后的兼容性。

status

int

标识为仅供参考。不提供支持。不保证以后的兼容性。

base_schema_ver

int

标识为仅供参考。不提供支持。不保证以后的兼容性。

replinfo

int

标识为仅供参考。不提供支持。不保证以后的兼容性。

parent_obj

int

父对象的对象标识号。例如,表 ID(如果父对象是触发器或约束)。

crdate

datetime

对象的创建日期。

ftcatid

smallint

注册为使用全文索引的所有用户表的全文目录标识符,对于没有注册的所有用户表则为 0。

schema_ver

int

在每次更改表的架构时都会增加的版本号。始终返回 0。

stats_schema_ver

int

标识为仅供参考。不提供支持。不保证以后的兼容性。

type

char(2)

对象类型。可以是下列值之一:

AF = 聚合函数 (CLR)

C = CHECK 约束

D = 默认值或 DEFAULT 约束

F = FOREIGN KEY 约束

FN = 标量函数

FS = 程序集 (CLR) 标量函数

FT = 程序集 (CLR) 表值函数 IF = 内联表函数

IT – 内部表

K = PRIMARY KEY 或 UNIQUE 约束

L = 日志

P = 存储过程

PC = 程序集 (CLR) 存储过程

R = 规则

RF = 复制筛选存储过程

S = 系统表

SN = 同义词

SQ = 服务队列

TA = 程序集 (CLR) DML 触发器

TF = 表函数

TR = SQL DML 触发器

TT = 表类型

U = 用户表

V = 视图

X = 扩展存储过程

userstat

smallint

标识为仅供参考。不提供支持。不保证以后的兼容性。

sysstat

smallint

标识为仅供参考。不提供支持。不保证以后的兼容性。

indexdel

smallint

标识为仅供参考。不提供支持。不保证以后的兼容性。

refdate

datetime

标识为仅供参考。不提供支持。不保证以后的兼容性。

version

int

标识为仅供参考。不提供支持。不保证以后的兼容性。

deltrig

int

标识为仅供参考。不提供支持。不保证以后的兼容性。

instrig

int

标识为仅供参考。不提供支持。不保证以后的兼容性。

updtrig

int

标识为仅供参考。不提供支持。不保证以后的兼容性。

seltrig

int

标识为仅供参考。不提供支持。不保证以后的兼容性。

category

int

用于发布、约束和标识。

cache

smallint

标识为仅供参考。不提供支持。不保证以后的兼容性。