SqlServer数据库常用脚本合集-持续更新

关键字查询存储过程

SELECT      DISTINCT
            obj.type AS xtype,
            sch.name AS schema_name,
            obj.name AS objname,
            sc.text
FROM        syscomments sc
            INNER JOIN sys.objects obj ON sc.id = obj.object_id
            INNER JOIN sys.schemas sch ON obj.schema_id = sch.schema_id
WHERE       sc.text LIKE '%Company%'
ORDER BY    obj.type,
            sch.name,
            obj.name;

查询当前正在执行的SQL

SELECT TOP 100
 t.hostname,
 t.loginame,
 percent_complete,
 [session_id],
 der.[request_id],
 [start_time] AS '开始时间',
 der.[status] AS '状态',
 [command] AS '命令',
 dest.[text] AS 'sql语句',
 DB_NAME([database_id]) AS '数据库名',
 [blocking_session_id] AS '正在阻塞其他会话的会话ID',
 [wait_type] AS '等待资源类型',
 [wait_time] AS '等待时间',
 [wait_resource] AS '等待的资源',
 [reads] AS '物理读次数',
 [writes] AS '写次数',
 [logical_reads] AS '逻辑读次数',
 [row_count] AS '返回结果行数',
 t.hostname,
 t.loginame
FROM sys.[dm_exec_requests] AS der
 CROSS APPLY sys.[dm_exec_sql_text](der.[sql_handle]) AS dest
 LEFT JOIN sys.sysprocesses t
 ON t.spid = der.session_id
WHERE [session_id] > 50
-- AND DB_NAME(der.[database_id]) = 'gposdb'
ORDER BY [cpu_time] DESC;

查询所有的库名

SELECT Name FROM Master..SysDatabases ORDER BY Name

查询所有的表名

SELECT Name FROM SysObjects Where XType='U' ORDER BY Name

查询所有的列信息

SELECT      S.name 架构名,
            D.name 表名,
            A.colorder 字段序号,
            A.name 字段名,
            (CASE
                 WHEN COLUMNPROPERTY(A.id, A.name, 'IsIdentity') = 1 THEN
                     '√'
                 ELSE
                     ''
             END) 标识,
            (CASE
                 WHEN (SELECT   COUNT(*)
                       FROM     sysobjects
                       WHERE    (name IN( SELECT    name
                                          FROM      sysindexes
                                          WHERE     (id = A.id)
                                                    AND (indid IN( SELECT   indid
                                                                   FROM     sysindexkeys
                                                                   WHERE    (id = A.id) AND (colid IN( SELECT   colid FROM  syscolumns WHERE(id = A.id) AND (name = A.name)))))))
                                AND   (xtype = 'PK')) > 0 THEN
                     '√'
                 ELSE
                     ''
             END) 主键,
            B.name 类型,
            A.length 占用字节数,
            COLUMNPROPERTY(A.id, A.name, 'PRECISION') AS 长度,
            ISNULL(COLUMNPROPERTY(A.id, A.name, 'Scale'), 0) AS 小数位数,
            (CASE
                 WHEN A.isnullable = 1 THEN
                     '√'
                 ELSE
                     ''
             END) 允许空,
            ISNULL(E.text, '') 默认值,
            ISNULL(G.[value], ' ') AS [说明],
            S.*
FROM        syscolumns A
            LEFT JOIN systypes B ON A.xtype = B.xusertype
            LEFT JOIN sysobjects D ON A.id = D.id
            LEFT JOIN syscomments E ON A.cdefault = E.id
            LEFT JOIN sys.extended_properties G ON A.id = G.major_id AND   A.colid = G.minor_id
            LEFT JOIN sys.extended_properties F ON D.id = F.class AND  F.minor_id = 0
            LEFT JOIN sys.objects O ON O.object_id = A.id
            LEFT JOIN sys.schemas S ON O.schema_id = S.schema_id
WHERE       D.xtype = 'U' AND   D.name <> 'dtproperties' AND A.name NOT IN ( '__$start_lsn', '__$end_lsn', '__$seqval', '__$operation', '__$update_mask' )
            AND  D.name = @TableName
ORDER BY    A.id,
            A.colorder;

查询所有数据库的大小,并且按照大小排序

SELECT 
    DB_NAME(database_id) AS DatabaseName,
    CAST(SUM(size * 8 / 1024.0) AS DECIMAL(10, 2)) AS DatabaseSizeMB
FROM 
    sys.master_files
WHERE 
    type = 0  -- 数据文件
GROUP BY 
    database_id
ORDER BY 
    DatabaseSizeMB DESC;

查询当前库所有表的数据总条数count(),按照条数排序

SELECT 
    t.name AS TableName,
    SUM(p.rows) [RowCount]
FROM 
    sys.tables AS t
INNER JOIN 
    sys.partitions AS p ON t.object_id = p.object_id
WHERE 
    p.index_id < 2
GROUP BY 
    t.name
ORDER BY 
    [RowCount] DESC;

跨服务器查询,openRowset支持跨服务器查询,当做子查询表,比如关联查询,select into 时会很方便

SELECT *
FROM OPENROWSET('SQLOLEDB', '192.168.xxx.xx'; 'sa'; 'password', 'SELECT * FROM 表名')
WHERE 1 = 1

修改数据库名称

USE master
GO

exec sp_renamedb 原库名, 新库名

删除所有进程

USE [master]
GO
--存在同名的删除掉
IF EXISTS ( SELECT *
 FROM dbo.sysobjects
 WHERE id = OBJECT_ID(N'[dbo].[p_killspid]')
 AND OBJECTPROPERTY(id, N'IsProcedure') = 1 )
 DROP PROCEDURE [dbo].[p_killspid_by_Libby];
GO
--创建存储过程
CREATE PROC [p_killspid_by_Libby] @dbname VARCHAR(200) --要关闭进程的数据库名
AS
 DECLARE @sql NVARCHAR(500); 
DECLARE @spid NVARCHAR(20);

DECLARE #tb CURSOR
FOR
    SELECT  spid = CAST(spid AS VARCHAR(20))
    FROM    master..sysprocesses
    WHERE   dbid = DB_ID(@dbname);
OPEN #tb;
FETCH NEXT FROM #tb INTO @spid;
WHILE @@fetch_status = 0
    BEGIN 
        EXEC('kill '+@spid);
        FETCH NEXT FROM #tb INTO @spid;
    END; 
CLOSE #tb;
DEALLOCATE #tb;

GO

--用法 
EXEC [p_killspid_by_Libby] 你要操作的数据库名称;
--删除存储过程
DROP PROCEDURE [dbo].[p_killspid_by_Libby];

还原数据库,这里脚本是含分区的,不分区的话只有两个文件,删除多余的move to即可

USE master;
GO
 
RESTORE DATABASE [DataBaseName02]  --新库名
FROM DISK = 'G:\DBFile\DBback\DataBaseName.bak' --备份文件路径
WITH REPLACE,
     MOVE 'DataBaseName' --备份文件中的文件名
     TO 'G:\DBFile\DataBaseFile\DataBaseName02.mdf', -- 还原后的该文件位置
     MOVE 'DataBaseName_log'
     TO 'G:\DBFile\DataBaseFile\DataBaseName02_log.ldf',
     MOVE 'DataBaseName_DataS'
     TO 'G:\DBFile\DataBaseFile\DataBaseName02_DataS.mdf',
     MOVE 'DataBaseName_DataSIndex'
     TO 'G:\DBFile\DataBaseFile\DataBaseName02_DataSIndex.mdf';
 
GO

修改表名

--修改表名
EXEC sp_rename @objname = '旧表名', @newname = '新表名'
EXEC sp_rename '旧表名', '新表名'
 
--例1 把表TABLE1改为TABLE2
EXEC sp_rename @objname = 'TABLE1', @newname = 'TABLE2'
 
--例2(简写)把表TABLE1改为TABLE2
EXEC sp_rename 'TABLE1','TABLE2'

删除所有进程

USE [master]
GO
--存在同名的删除掉
IF EXISTS ( SELECT *
 FROM dbo.sysobjects
 WHERE id = OBJECT_ID(N'[dbo].[p_killspid]')
 AND OBJECTPROPERTY(id, N'IsProcedure') = 1 )
 DROP PROCEDURE [dbo].[p_killspid_by_Libby];
GO
--创建存储过程
CREATE PROC [p_killspid_by_Libby] @dbname VARCHAR(200) --要关闭进程的数据库名
AS
 DECLARE @sql NVARCHAR(500); 
DECLARE @spid NVARCHAR(20);

DECLARE #tb CURSOR
FOR
    SELECT  spid = CAST(spid AS VARCHAR(20))
    FROM    master..sysprocesses
    WHERE   dbid = DB_ID(@dbname);
OPEN #tb;
FETCH NEXT FROM #tb INTO @spid;
WHILE @@fetch_status = 0
    BEGIN 
        EXEC('kill '+@spid);
        FETCH NEXT FROM #tb INTO @spid;
    END; 
CLOSE #tb;
DEALLOCATE #tb;

GO

--用法 
EXEC [p_killspid_by_Libby] 你要操作的数据库名称;
--删除存储过程
DROP PROCEDURE [dbo].[p_killspid_by_Libby];

删除单个进程

--查询出所有进程
SELECT  TOP 100 t.hostname ,
                t.loginame ,
                percent_complete ,
                [session_id] ,
                der.[request_id] ,
                [start_time] AS '开始时间' ,
                der.[status] AS '状态' ,
                [command] AS '命令' ,
                dest.[text] AS 'sql语句' ,
                DB_NAME([database_id]) AS '数据库名' ,
                [blocking_session_id] AS '正在阻塞其他会话的会话ID' ,
                [wait_type] AS '等待资源类型' ,
                [wait_time] AS '等待时间' ,
                [wait_resource] AS '等待的资源' ,
                [reads] AS '物理读次数' ,
                [writes] AS '写次数' ,
                [logical_reads] AS '逻辑读次数' ,
                [row_count] AS '返回结果行数' ,
                t.hostname ,
                t.loginame
FROM    sys.[dm_exec_requests] AS der
        CROSS APPLY sys.[dm_exec_sql_text](der.[sql_handle]) AS dest
        LEFT JOIN sys.sysprocesses t
                  ON t.spid=der.session_id
WHERE   [session_id]>50
-- AND DB_NAME(der.[database_id]) = 'gposdb'
ORDER BY [cpu_time] DESC;


KILL 【session_id】

收缩数据库日志

USE [master];

------------遍历所有用户数据库 进行日志清理------------------------------------------------------------------- 
DECLARE @SQL AS NVARCHAR (4000);
DECLARE @DATABaseName AS NVARCHAR (50);

DECLARE My_Cursor CURSOR --定义游标 
FOR(
SELECT  name
FROM    sys.databases
WHERE   name NOT IN ( 'master', 'msdb', 'tempdb', 'model', 'ReportServerTempDB', 'ReportServer' )); --查出需要的集合放到游标中

OPEN My_Cursor; --打开游标

FETCH NEXT FROM My_Cursor
INTO @DATABaseName; --读取第一行数据 

WHILE @@FETCH_STATUS=0
    BEGIN
        SET @SQL='
USE '+  @DATABaseName +'--查询出数据库对应的日志文件名称
DECLARE @strDBName AS NVARCHAR(500)
DECLARE @strLogName AS NVARCHAR(500)
DECLARE @strSQL AS VARCHAR(1000)

DECLARE @DBLogSise AS INT = 2

SELECT @strLogName = B.name,
  @strDBName = A.name
FROM   MASTER.sys.databases         AS A
  INNER JOIN sys.master_files  AS B
ON  A.database_id = B.database_id
WHERE  A.database_id = DB_ID() 

SET @strSQL = ''
--设置数据库恢复模式为简单
ALTER DATABASE ['' + @strDBName +
''] SET RECOVERY SIMPLE;
--收缩日志文件
DBCC SHRINKFILE ('' + @strLogName + '' , '' + CONVERT(VARCHAR(20), @DBLogSise)
+ '');
--恢复数据库还原模式为完整
ALTER DATABASE ['' + @strDBName + ''] SET RECOVERY FULL ''

EXEC (@strSQL)';

        EXEC ( @SQL );

        PRINT '清理'+@DATABaseName+'日志完成';

        FETCH NEXT FROM My_Cursor
        INTO @DATABaseName; --读取下一行数据
    END;

CLOSE My_Cursor; --关闭游标
DEALLOCATE My_Cursor; --释放游标

PRINT '-----------清理日志完成---------------------'+CONVERT(VARCHAR (100), GETDATE(), 126)+'----------';

收缩数据库实例

USE DataBaseName
GO

SELECT allocated_extent_page_count*8000/1024/1024 结果,* FROM sys.dm_db_file_space_usage

----用allocated_extent_page_count列数据乘8000得出字节----
----用得出字节除两次1024得出MB,填到下面结果里----

DBCC SHRINKFILE('DataBaseName', 结果);

卷序列号码为 00000030 4489:1826 C:. │ sqlserver2000.txt │ ├─第01章 │ 1.9.1 设置内存选项.sql │ 1.9.2(2) 使用文件及文件组.sql │ 1.9.2(3) 调整tempdb数据库的文件属性.sql │ ├─第02章 │ │ 2.1 日期概念理解中的一些测试.sql │ │ 2.2.4 CONVERT在日期转换中的使用示例.sql │ │ 2.3.3 SET DATEFORMAT对日期处理的影响.sql │ │ 2.3.4 SET LANGUAGE对日期处理的影响示例.sql │ │ 2.4.1 日期格式化处理.sql │ │ 2.4.2 日期推算处理.sql │ │ 2.4.3 特殊日期加减函数.sql │ │ 2.5.1 查询指定日期段内过生日的人员.sql │ │ 2.5.2 生成日期列表的函数.sql │ │ 2.5.3 工作日处理函数(标准节假日).sql │ │ 2.5.3 工作日处理函数(自定义节假日).sql │ │ 2.5.4 计算工作时间的函数.sql │ │ │ └─其他 │ 交叉表.sql │ 任意两个时间之间的星期几的次数-横.sql │ 任意两个时间之间的星期几的次数-纵.sql │ 复杂年月处理.sql │ 统计--交叉表+日期+优先.sql │ ├─第03章 │ │ 3.2 各种字符串分拆处理函数.sql │ │ 3.3 各种字符串合并处理示例.sql │ │ 3.4.1 分段截取函数.sql │ │ 3.4.2 分段更新函数.sql │ │ 3.4.3 IP地址处理函数.sql │ │ 3.5.1 字符串比较函数.sql │ │ 3.5.2 字符串并集&交集处理示例.sql │ │ 3.5.3 字符串分拆并统计的处理示例.sql │ │ 3.5.5 字符串处理示例--列车车次查询.sql │ │ 3.6.2 字符串在编号查询中的应用示例及常见问题.sql │ │ 3.6.3 动态参数的存储过程示例.sql │ │ 3.6.4 动态他Transact-SQL语句处理中的常见问题演示.sql │ │ 3.7.3 text与ntext字段的复制和合并处理示例.sql │ │ 3.7.4 text与image字段转换处理示例.sql │ │ 3.7.5 ntext字段的REPLACE处理示例.sql │ │ │ └─其他 │ varbinary转换成字符串.sql │ 关键字搜索.sql │ 分解公式.sql │ 字符串分拆--格式化.sql │ 得到一个字符串在另一个字符串中出现的次数.sql │ 数字转换成十六进制.sql │ 比较第一与第二个字符串,是否有连续的5个字符相同.sql │ 生成查询的模糊匹配字符串.sql │ 简繁转换.sql │ 统计一个表中某个字符出现最多的字母.sql │ 非法字符串处理.sql │ ├─第04章 │ │ 4.1.5 在各种处理中应用排序规则的示例.sql │ │ 4.2.1 排序规则在拼音处理中的应用.sql │ │ 4.2.2 排序规则在全角与半角处理中的应用.sql │ │ │ └─其他 │ 生成GB2312汉字表.sql │ 生成GBK汉字表.sql │ 自动获取汉字笔画.sql │ ├─第05章 │ │ 5.1.1 SET IDENTITY_INSERT 中的几个问题.sql │ │ 5.1.1 修改标识值的示例.sql │ │ 5.1.1 标识列与普通列互相转换的示例.sql │ │ 5.2.1 查表法按日期生成流水号的示例.sql │ │ 5.2.1 查表法生成流水号的示例.sql │ │ 5.2.2 使用编号表按日期生成流水号的示例.sql │ │ 5.2.2 使用编号表生成流水号的示例.sql │ │ 5.2.3 生成纯字母随机编号的示例(仅大小或者小写).sql │ │ 5.2.3 生成纯字母随机编号的示例(大小写混合).sql │ │ 5.2.3 生成纯数字随机编号的示例.sql │ │ 5.3.2 融合了补号处理的编号生成处理示例.sql │ │ 5.3.3 使用UPDATE进行编号重排的处理示例.sql │ │ 5.3.3 使用临时表进行编号重排的处理示例.sql │ │ 5.3.3 使用子查询进行编号重排的处理示例.sql │ │ 5.3.3 名次查询的处理示例.sql │ │ 5.4.1 查询已用编号分布情况的示例(临时表法).sql │ │ 5.4.1 查询已用编号分布情况的示例(子查询法).sql │ │ 5.4.2 查询缺号分布情况的示例.sql │ │ 5.4.3 返回已用编号、缺号分布字符串的处理示例.sql │ │ 5.4.4 缺勤天数统计的处理示例.sql │ │ │ └─其他 │ -补位法.sql │ 以另一个表的字段做默认值.sql │ 以另一表的字段生成编号.sql │ 关联部门流水号.sql │ 十六进制.sql │ 学号.sql │ 开票统计--涉及到连号处理.sql │ 新编号查询示例(分类查询).sql │ 新编号查询示例.sql │ 日期流水号.sql │ 材料流水号.sql │ 流水号.sql │ 箱编号连号处理.sql │ 类别自动生成编号示例.sql │ 自已做标识列的例子.sql │ 触发器自动维护已用&未用编号.sql │ 连续编号.sql │ 防止重复的示例.sql │ 项目编号=各项目独立流水号&各年不同.sql │ ├─第06章 │ │ 6.1.1 NULL对IN的查询的影响及解决示例.sql │ │ 6.1.2 各种联接的使用示例.sql │ │ 6.1.2 多表联结导致记录重复的示例.sql │ │ 6.1.3 使用UNION实现库存报表的示例.sql │ │ 6.1.5 按指定上下限区间进行数据统计的示例.sql │ │ 6.1.6 随机出题的示例.sql │ │ 6.2.1 ROLLUP实现的分级汇总示例(定义各汇总列标题).sql │ │ 6.2.1 ROLLUP实现的分级汇总示例(带排序及汇总列标题处理).sql │ │ 6.2.1 ROLLUP实现的分级汇总示例(带排序处理).sql │ │ 6.2.1 ROLLUP实现的分级汇总示例.sql │ │ 6.2.1 UNION ALL实现的分级汇总示例.sql │ │ 6.3.1 简单的交叉报表处理示例.sql │ │ 6.3.2 多列转换为行的交叉报表处理示例.sql │ │ 6.3.3 行值动态变化的交叉报表处理示例(转换多列).sql │ │ 6.3.3 行值动态变化的交叉报表处理示例.sql │ │ 6.3.4 化解字符串不能超过8000的方法.sql │ │ 6.3.5 特殊的交叉报表处理示例.sql │ │ 6.4.1 库存明细帐处理示例(包含结存数).sql │ │ 6.4.1 库存明细帐处理示例.sql │ │ 6.4.2 同期及上期数据对比处理示例.sql │ │ 6.4.3 动态分组处理示例.sql │ │ 6.4.4 排行榜处理示例.sql │ │ │ └─其他 │ 交叉表--复杂名次.sql │ 交叉表-优先级处理.sql │ 交叉表分析.sql │ 分级汇总.sql │ 分组交叉表.sql │ 列转行.sql │ 固定行列报表.sql │ 复杂交叉表.sql │ 复杂交叉表1.sql │ 多栏显示.sql │ 日期+星期+时间.sql │ 格式化报表.sql │ 横转竖-1.sql │ 横转竖-字段名.sql │ 横转竖-生成字段名.sql │ 横转竖.sql │ 行列互换的复杂交叉表.sql │ 限制列数的交叉表.sql │ ├─第07章 │ │ 7.1 splitpage.asp │ │ 7.2.1 TOP n 实现的通用分页存储过程.sql │ │ 7.2.2 字符串缓存实现的通用分页存储过程.sql │ │ 7.2.3 临时表缓存实现的通用分页存储过程.sql │ │ 7.2.4 使用系统存储过程实现的通用分页存储过程.sql │ │ 7.3.1 实现随机分页的通用分页存储过程.sql │ │ 7.3.2 根据分类表实现的分页存储过程.sql │ │ │ └─其他 │ sp_cursor.sql │ 基本方法.sql │ ├─第08章 │ │ 8.1.2 树形数据分级汇总示例.sql │ │ 8.1.3 树形数据编号重排的通用存储过程.sql │ │ 8.1.3 树形数据编号重排示例.sql │ │ 8.1.4 实现编码规则调整处理的通用存储过程.sql │ │ 8.1.4 生成编码规则调整处理T-SQL语句的函数.sql │ │ 8.1.5 删除节点处理的通用存储过程.sql │ │ 8.1.5 移动节点处理的通用存储过程.sql │ │ 8.2.2 树形数据层次显示处理示例.sql │ │ 8.2.2 树形数据广度排序处理示例.sql │ │ 8.2.2 树形数据深度排序处理示例(模拟单编号法).sql │ │ 8.2.2 树形数据深度排序处理示例(递归法).sql │ │ 8.2.3 查找指定节点的所有子节点的示例函数.sql │ │ 8.2.4 查找指定节点的所有父节点的示例函数.sql │ │ 8.2.5 校验插入指定结点是否导致编码循环的示例函数.sql │ │ 8.2.5 校验表中数据是否有循环编码的通用存储过程.sql │ │ 8.2.6 复制指定节点及其所有子节点到指定结点的处理示例(借鉴方式排序法).sql │ │ 8.2.6 复制指定节点及其所有子节点到指定结点的处理示例.sql │ │ 8.2.7 实现删除指定结点及所有子节点的处理触发器.sql │ │ 8.2.8 逐级汇总示例(循环逐级累计法).sql │ │ 8.2.8 逐级汇总示例(用户定义函数法).sql │ │ 8.3.1 产品配件清单查询示例.sql │ │ 8.3.2 最短乘车路线查询示例.sql │ │ │ └─其他 │ xml菜单.sql │ 宝塔形数据的处理-1.sql │ 宝塔形数据的处理.sql │ 树形数据生成xml.sql │ ├─第09章 │ │ 9.1.3 访问外部数据源方法总结.sql │ │ 9.5.1 二进制文件存取示例(T-SQL).sql │ │ 9.5.1 二进制文件存取示例(VB&VBA).vbs │ │ a.txt │ │ Schema.ini │ │ │ └─其他 │ bcp-数据导入导出(全).sql │ bcp-数据导入导出-二进制文件.sql │ bcp-数据导出为文件.sql │ bcp表数据存为XML.sqlSQL Server到Oracle连接服务器的实现.sqlSQL Server到SQLBASE连接服务器的实现.sqlSQL Server到SYBASE连接服务器的实现.sqlsql导出mysql.sql │ textcopy实现文件存取.sql │ Vb程序实现文件存取.sql │ 导入文本文件时如何指定字段类型.sql │ 导出northwind中Employees的图像.sql │ 将某个目录上的Excel表,导入到数据库中.sql │ 数据导入导出基本方法.sql │ 用ASP上传&下载文件.sql
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值