More servicesWindows Live
Sign in
 
 
Spaces home  T-SQL脚本中心PhotosProfileFriendsMore Tools Explore the Spaces community
There are no photo albums.

T-SQL脚本中心

提供常用的T-SQL脚本

查询数据库中表空间使用状况

/*-- ===================================================================

版本: SQL Server 2000, 2005

功能: 查询数据库中表空间使用状况

=================================================================== --*/

 

USE [要查询空间信息的库名]

GO

 

SELECT

    ServerName = CONVERT(sysname, SERVERPROPERTY('ServerName')),

    DatabaseID = DB_ID(),

    DatabaseName = DB_NAME(),

    ObjectID = DATA.id,

    Owner = USER_NAME(DATA.uid),

    ObjectName = DATA.Name,

    Reserved = CONVERT(decimal(15, 2), DATA.Reserved / SPER.PageSperMB),

    DataSize = CONVERT(decimal(15, 2), (DATA.DataSize + DATA.[TextSize]) / SPER.PageSperMB),

    IndexSize = CONVERT(decimal(15, 2), (DATA.IndexSize - DATA.DataSize - DATA.[TextSize]) / SPER.PageSperMB),

    UnUsedSize = CONVERT(decimal(15, 2), (DATA.Reserved - DATA.IndexSize) / SPER.PageSperMB),

    DATA.Rows

FROM(

    SELECT

        O.id, O.uid, O.name, O.xtype,

        Reserved = ISNULL(SUM(CASE WHEN IX.indid IN (0, 1, 255) THEN CONVERT(dec(15), IX.reserved) ELSE 0 END), 0),

        DataSize = ISNULL(SUM(CASE WHEN IX.indid < 2 THEN CONVERT(dec(15), IX.dpages) ELSE 0 END), 0),

        [TextSize] = ISNULL(SUM(CASE WHEN IX.indid = 255 THEN CONVERT(dec(15), IX.used) ELSE 0 END), 0),

        IndexSize = ISNULL(SUM(CASE WHEN IX.indid IN (0, 1, 255) THEN CONVERT(dec(15), IX.used) ELSE 0 END), 0),

        Rows = ISNULL(MAX(CASE WHEN IX.indid < 2 THEN IX.rows ELSE 0 END), 0)

    FROM dbo.sysindexes IX WITH(NOLOCK)

        INNER JOIN dbo.sysobjects O WITH(NOLOCK)

            ON IX.id = O.id

    WHERE O.xtype IN ( 'U')--, 'S')

        AND O.status > =0

        AND (IX.indid < 2 OR IX.indid = 255)

    GROUP BY O.id, O.uid, O.name, O.xtype

)DATA

    CROSS JOIN(

        SELECT PageSperMB = 1048576. / low, low

        FROM master.dbo.spt_values

        WHERE number = 1

                AND type = 'E'

    )SPER

ORDER BY ObjectName, Owner

GO 

查询数据库空间使用状况

/*-- ===================================================================

版本: SQL Server 2000, 2005

功能: 查询数据库空间使用状况

=================================================================== --*/

 

USE [要查询空间信息的库名]

GO

 

SELECT

    ServerName = CONVERT(sysname, SERVERPROPERTY('ServerName')),

    DatabaseID = DB_ID(),

    DatabaseName = DB_NAME(),

    DatabaseSize = CONVERT(decimal(15, 2), DB.DbSize / SPER.PageSperMB),

    DataFileSize = CONVERT(decimal(15, 2), DB.DataFileSize / SPER.PageSperMB),

    LogFileSize = CONVERT(decimal(15, 2), DB.LogFileSize / SPER.PageSperMB),

    UnAllocated = CONVERT(decimal(15, 2), (DB.DataFileSize - DATA.Reserved) / SPER.PageSperMB),

    DataReserved = CONVERT(decimal(15, 2), DATA.Reserved / SPER.PageSperMB),

    DataSize = CONVERT(decimal(15, 2), (DATA.DataSize + DATA.[TextSize]) / SPER.PageSperMB),

    IndexSize = CONVERT(decimal(15, 2), (DATA.IndexSize - DATA.DataSize - DATA.[TextSize]) / SPER.PageSperMB),

    UnUsedSize = CONVERT(decimal(15, 2), (DATA.Reserved - DATA.IndexSize) / SPER.PageSperMB),

    CountProcedure = OBJS.ProcudureS,

    CountFunction = OBJS.FunctionS,

    CountTrigger = OBJS.TriggerS,

    CountUserTable = OBJS.TableS,

    CountView = OBJS.ViewS,

    RecoveryMode = CONVERT(varchar(12), DATABASEPROPERTYEX(DB_NAME(), N'Recovery')),

    PrimaryDrive = CONVERT(char(1), (

            SELECT TOP 1 UPPER(LEFT(FileName, 1))

            FROM master.dbo.sysdatabases WITH(NOLOCK)

            WHERE dbid = DB_ID()))

FROM(

    SELECT

        DbSize = ISNULL(SUM(CONVERT(dec(15), size)), 0),

        DataFileSize = ISNULL(SUM(CASE WHEN status & 0x40 =0 THEN CONVERT(dec(15), size) ELSE 0 END), 0),

        LogFileSize = ISNULL(SUM(CASE WHEN status & 0x40 =0 THEN 0 ELSE CONVERT(dec(15), size) END), 0)

    FROM dbo.sysfiles WITH (NOLOCK)

)DB

    CROSS JOIN(

        SELECT

            Reserved = ISNULL(SUM(CASE WHEN indid IN (0, 1, 255) THEN CONVERT(dec(15), reserved) ELSE 0 END), 0),

            DataSize = ISNULL(SUM(CASE WHEN indid < 2 THEN CONVERT(dec(15), dpages) ELSE 0 END), 0),

            [TextSize] = ISNULL(SUM(CASE WHEN indid = 255 THEN CONVERT(dec(15), used) ELSE 0 END), 0),

            IndexSize = ISNULL(SUM(CASE WHEN indid IN (0, 1, 255) THEN CONVERT(dec(15), used) ELSE 0 END), 0)

        FROM dbo.sysindexes WITH(NOLOCK)

        WHERE (indid < 2 OR indid = 255)

    )DATA

    CROSS JOIN(

        SELECT PageSperMB = 1048576. / low

        FROM master.dbo.spt_values

        WHERE number = 1

                AND type = 'E'

    )SPER

    CROSS JOIN(

        SELECT

            TableS = SUM(CASE xtype WHEN 'U' THEN 1 ELSE 0 END),

            ProcudureS = SUM(CASE xtype WHEN 'P' THEN 1 ELSE 0 END),

            ViewS = SUM(CASE xtype WHEN 'V' THEN 1 ELSE 0 END),

            TriggerS = SUM(CASE xtype WHEN 'TR' THEN 1 ELSE 0 END),

            FunctionS = SUM(CASE WHEN xtype IN('FN', 'IF', 'TF') THEN 1 ELSE 0 END)

        FROM dbo.sysobjects

    )OBJS

GO

  

生成指定数据库的脚本

/*-- ===================================================================

版本: SQL Server 2000

功能: 生成指定数据库的脚本

=================================================================== --*/

 

USE [准备脚本的数据库名]

GO

 

DECLARE @s nvarchar(4000),@Path nvarchar(1000)

 

-- =====================================================================

-- 脚本文件存放目录

-- =====================================================================

SET @Path='e:\'

        +CAST(SERVERPROPERTY(N'ServerName') as sysname)+N'\'

        +DB_NAME()+N'\'

 

SET @s=N'md '+QUOTENAME(@Path,N'"')

EXEC master.dbo.xp_cmdshell @s

-- --脚本生成处理

-- SET @s=N'scptxfr /s '+QUOTENAME(ServerName,N'"')

-- +N' /d '+QUOTENAME(DbName,N'"')

-- --   +N' /I'  --使用windows身份验证,如果使用sql身份验证,则愀为+N' /P "sa密码"',固定使用sa用户

--  +N' /P '+QUOTENAME(N'4saadmin',N'"')

-- +N' /f '+QUOTENAME(@Path+ScriptFile,N'"')

-- +N' /Y /q /T /C /r'  -- /r 生成drop 脚本/H 生成不带首部的脚本(默认带首部)

-- EXEC master..xp_cmdshell @s,no_output

 

-- =====================================================================

-- Get Server Info

-- =====================================================================

SELECT @s=N'scptxfr /s '+QUOTENAME(Server,N'"')

    +N' /d '+QUOTENAME(DbName,N'"')

    +N' /I'  -- 使用windows身份验证,如果使用sql身份验证,则愀为+N' /P "sa密码"',固定使用sa用户

--  +N' /P '+QUOTENAME(N'4saadmin',N'"')

    +N' /f '+QUOTENAME(@Path+ScriptFile,N'"')

    +N' /Y /q /T /C /r'  -- /r 生成drop 脚本/H 生成不带首部的脚本(默认带首部)

FROM(

    SELECT Server=N'10.1.25.13\d2his01',

        DbName = DB_NAME(),

        ScriptFile= DB_NAME()

            +N'.SQL'

)A

EXEC master.dbo.xp_cmdshell @s