
常用代码
常用代码
吉普赛的歌
这个作者很懒,什么都没留下…
展开
-
SqlServer: 删除重复数据
USE tempdbGOIF OBJECT_ID('t') IS NOT NULL DROP TABLE tGOCREATE TABLE t( id INT, [name] NVARCHAR(10) )GOSET NOCOUNT ONINSERT INTO t VALUES(1,'a')INSERT INTO t VALUES(1,'a')INSERT INTO t VALUES(2,'b')INSERT INTO t VALUES(2,'b')INSERT INTO t V.原创 2021-06-08 17:14:48 · 328 阅读 · 3 评论 -
SqlServer: 汉字转拼音标量函数
IF OBJECT_ID('[Fun_GetPinYin]') IS NOT NULLDROP FUNCTION [Fun_GetPinYin]GO-- =============================================-- Author: yenange-- Create date: 2020-09-01-- Description: 获取拼音-- =============================================CREATE FUNCT.原创 2021-02-08 12:08:15 · 462 阅读 · 0 评论 -
SQL Server: 将截断字符串或二进制数据,快速判断哪个字段超长
上面的出错, 用 SQL Server 的人基本上都遇到过。如果某个表的字段少还好, 有几十甚至更多字段就抓瞎了,如何快速判断哪个字段超长呢?先创建一个存储过程:IF OBJECT_ID('Proc_Util_GetLenOverflowColumns') IS NOT NULL DROP PROC Proc_Util_GetLenOverflowColumnsGO-- =============================================-- Author: y..原创 2020-10-09 19:47:25 · 8025 阅读 · 2 评论 -
关闭 sp_OACreate 与 xp_cmdshell
sp_OACreate 与 xp_cmdshell 都是比较危险的存储过程,一般情况下应该禁用。------------------ 关闭 Ole Automation Procedures -----------------------------sp_configure 'show advanced options', 1;GORECONFIGURE WITH OVERRIDE;原创 2017-08-29 15:42:50 · 906 阅读 · 0 评论 -
导出EXCEL的存储过程
IF OBJECT_ID('dbo.Proc_DBA_ExportExcel') IS NOT NULL DROP PROC dbo.Proc_DBA_ExportExcel GOCREATE PROC dbo.Proc_DBA_ExportExcel @sqlstr varchar(8000),--查询语句,如果查询语句中使用了order by ,请加上top 100 perce转载 2017-12-22 08:40:24 · 1461 阅读 · 0 评论 -
用作业来停止作业
有的作业非常大, 可能运行时间超长,从而影响白天正常生产, 因此非常有必要加一个作业来主动停止大作业。IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].Proc_DBA_StopJob') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].P原创 2017-12-07 14:12:47 · 494 阅读 · 0 评论 -
将脚本字符串按GO分割再执行
我们平常得到的脚本往往含有GO, 这是无法用动态语句直接执行的, 但有时GO不能直接去掉(比如create view之类), 如何处理?1. 需要按行分割表值函数:Fun_SplitByLine2. 增加一个存储即可:IF OBJECT_ID('dbo.Proc_DBA_ExecBySplitGo') IS NOT NULL DROP PROC dbo.Proc_DBA_ExecBy原创 2017-12-19 10:29:41 · 669 阅读 · 0 评论 -
快速获取表总行数的标量函数
IF OBJECT_ID('dbo.Fun_GetTableRows') IS NOT NULL DROP FUNCTION dbo.Fun_GetTableRowsGO-- =============================================-- Author: yenange-- Create date: 2018-01-23-- Description:原创 2018-01-23 16:41:20 · 363 阅读 · 0 评论 -
查数据库的日志文件的大小
DECLARE @t TABLE( [Database Name] NVARCHAR(100) ,[Log Size (MB)] DECIMAL(15,2) ,[Log Space Used (%)] DECIMAL(15,2) ,[Status] INT)INSERT INTO @tEXEC ('DBCC SQLPERF(LOGSPACE)')SELECT * FROM @t原创 2018-02-01 16:53:41 · 341 阅读 · 0 评论 -
查看索引在哪个文件组
SELECT OBJECT_NAME(i.[object_id]) AS [ObjectName] ,i.[index_id] AS [IndexID] ,i.[name] AS [IndexName] ,i.[type_desc] AS [IndexType] ,i.[data_space_id] AS [DatabaseSpaceID] ,f.[name原创 2018-02-02 17:05:04 · 347 阅读 · 0 评论 -
按长度分割字符串表值函数
IF OBJECT_ID('dbo.[Fun_SplitByLen]') IS NOT NULL DROP FUNCTION dbo.[Fun_SplitByLen]GO-- =============================================-- Author: yenange-- Create date: 2018-01-19-- Description:原创 2018-01-19 11:04:10 · 284 阅读 · 0 评论 -
将表中数据变为insert语句
ALTER PROCEDURE [dbo].[AutoInsert] @tablename SYSNAME, @filter NVARCHAR(500), @Order NVARCHAR(500)AS DECLARE @column VARCHAR(MAX) DECLARE @columndata VARCHAR(MAX) DECLARE @sql VARCHAR(MAX原创 2012-06-14 16:36:29 · 1704 阅读 · 0 评论 -
查询系统表
;WITH cte AS (SELECT tbl.*, CAST( CASE WHEN tbl.is_ms_shipped = 1 THEN 1 WHEN ( SELECT major_id FR...原创 2018-03-07 15:36:52 · 320 阅读 · 0 评论 -
修改某个表的文件组
--测试库 test--测试表 t--测试表主键 id ( PK_t )--文件组有 primary,data--希望将 t 的文件组由 primary 改成 dataUSE testGOALTER TABLE t DROP CONSTRAINT PK_tGOALTER TABLE t ADD CONSTRAINT PK_t PRIMARY KEY CLUSTERED (ID)原创 2017-10-16 09:07:53 · 1202 阅读 · 0 评论 -
限制用户只能执行某个存储过程
--总的思路就是限制对方只能执行这个存储过程,其它的操作都做不了--以 test 为例,你自己要将 test 全部替换成你自己的库------ 这一部分是在测试库加测试表和测试的存储过程 Begin ---------USE testGOIF OBJECT_ID('theTable') IS NOT NULL DROP TABLE theTableGOCREATE TABLE the原创 2017-10-14 17:30:52 · 1187 阅读 · 0 评论 -
查询哪些表没有聚集索引
--查询哪些表没有聚集索引SELECT * FROM ( SELECT t.name AS tableName,(SELECT TOP 1 name FROM sys.indexes AS i WHERE i.type_desc='CLUSTERED' AND t.[object_id]=i.[object_id]) AS clusteredIndexName FROM sys.table原创 2017-09-18 11:15:24 · 928 阅读 · 0 评论 -
用语句来创建多个数据库的备份、删除过期文件作业
SQLServer的维护计划是强大的,特别是体现在备份、删除过期文件这个方面。可以创建文件夹、备份多个库、删除过期文件……不过配置时还是有点烦人,要选择很多东西。那用语句如何实现呢?--作业步骤1. 备份所有指定数据库DECLARE @dbs TABLE( rowNum INT IDENTITY(1, 1) PRIMARY KEY, dbName NVARCHAR原创 2017-09-01 17:12:18 · 2854 阅读 · 3 评论 -
如何改数据库名称和文件的扩展名
今天碰到一个数据库, 居然没有扩展名, 也是醉了, 连附加都没办法用图形界面……还是得想办法将其改为正规的扩展名才好。USE [master]GO--1. 创建测试库CREATE DATABASE [abc] CONTAINMENT = NONE ON PRIMARY ( NAME = N'abc', FILENAME = N'D:\database\abc' , SIZE原创 2017-09-01 17:53:17 · 896 阅读 · 0 评论 -
无ldf日志文件附加数据库
--方法一:直接附加,产生新的日志文件USE [master]GOCREATE DATABASE [AdventureWorks2014]ON (FILENAME = N'D:\database\2014\AdventureWorks2014_Data.mdf')FOR ATTACH_REBUILD_LOGGO/*文件激活失败。物理文件名称'D:\database\2014\Ad原创 2017-09-11 14:11:06 · 4193 阅读 · 0 评论 -
查出表的主键及主键列
SELECT t.name AS tableName, i.name AS pkName, STUFF((SELECT ',' + c.name FROM sys.sysindexkeys AS s2 INNER JOIN sys.[columns] AS c ON c.c原创 2017-09-11 21:24:42 · 653 阅读 · 0 评论 -
数据库对象重命名
--更改表名: old_tabName 改为 new_tabNamesp_rename 'old_tabName','new_tabName'--更改列名: old_colName 改为 new_colNamesp_rename 'tabName.old_colName','new_colName','COLUMN'--更改索引名: old_indName 改为 new_indNam原创 2017-09-20 13:50:35 · 482 阅读 · 0 评论 -
最近执行较慢的SQL
SELECT TOP 10 OBJECT_NAME(qt.objectid, qt.dbId) AS procName, DB_NAME(qt.dbId) AS [db_name], qt.text AS SQL_Full, SUBSTRING( ...原创 2017-08-15 12:56:43 · 1739 阅读 · 2 评论 -
SqlServer 错误日志切换和查看
原文: 点击打开链接Sql Server 日志 和 代理错误日一般在实例重启后自动切换,如果实例久未重启,将可能积累太多的日志,不方便查看. 查看错误日志大小: [sql] view plain copy--查看日志大小 EXEC xp_enumerrorlogs --sqlserver错误日志 EXEC xp_enumerrorlogs 1 --...转载 2017-10-27 16:00:44 · 2842 阅读 · 0 评论 -
查长时间运行事务
SELECT b.[session_id] ,b.[open_transaction_count] ,b.[total_elapsed_time] ,a.[name] AS 'transaction_name' ,b.[command] ,a.[transaction_begin_time] ,b.[blocki原创 2017-10-27 16:56:08 · 645 阅读 · 0 评论 -
存储过程的监控表DBA_proc_log
----------------------- 创建监控表 ----------------------------------创建存储过程(普通SQL也可以,但要改程序了) 记录表IF OBJECT_ID('[dbo].[DBA_proc_log]') IS NOT NULL DROP TABLE [dbo].[DBA_proc_log]GOCREATE TABLE [dbo].[DB原创 2017-06-29 14:34:40 · 1020 阅读 · 0 评论 -
用事务为防止并发时多次更新同一记录(锁)
--准备测试表及测试数据USE tempdbGOIF OBJECT_ID('task') IS NOT NULL DROP TABLE taskGOCREATE TABLE task ( taskId INT IDENTITY(1,1) PRIMARY KEY ,taskName NVARCHAR(50) NOT NULL ,d DATETIME NOT NULL DEFAULT(...原创 2018-03-16 14:10:33 · 4613 阅读 · 0 评论 -
自定义表列
USE tempdbGOIF OBJECT_ID('userInfo') IS NOT NULL DROP TABLE userInfoGOcreate table userInfo( userId int identity(1,1) primary key, userName nvarchar(20) not null, --姓名 必填 birthday da原创 2018-02-24 12:46:17 · 229 阅读 · 0 评论 -
获取某个月的总天数
IF OBJECT_ID('dbo.Fun_GetMonthDays') IS NOT NULL DROP FUNCTION dbo.Fun_GetMonthDaysGO-- =============================================-- Author: yenange-- Create date: 2018-07-03-- Description: 获...原创 2018-07-03 14:36:52 · 477 阅读 · 0 评论 -
批量复制数据到新库
USE newDB --新库名, 自己改GODECLARE @sourceDbName NVARCHAR(200),@targetName NVARCHAR(200)SET @sourceDbName='oldDbName' --旧库名, 自己改SET @targetName=DB_NAME()SET NOCOUNT ONDECLARE @t TABLE ( rowNu...原创 2018-08-06 17:52:02 · 348 阅读 · 0 评论 -
判断分区表的索引是否未与分区文件组一致
SELECT *FROM sys.tables AS t JOIN sys.indexes AS i ON t.[object_id] = i.[object_id] JOIN sys.partition_schemes ps ON i.data_space_id = ps.data_space_idWHERE t.[object_id] IN ( ...原创 2018-08-03 09:20:07 · 285 阅读 · 1 评论 -
树形数据:聚合字符串补齐位数便于排序
USE tempdbGOIF OBJECT_ID('t') IS NOT NULL DROP TABLE tGOCREATE TABLE t( struct VARCHAR(50) )GOINSERT INTO tSELECT '1.1'UNION ALL SELECT '1.2.1'UNION ALL SELECT '1.10.1' UNION ALL SELECT '...原创 2018-08-08 11:09:34 · 258 阅读 · 0 评论 -
去除聚合字符串中的一个字符串
USE tempdbGOIF OBJECT_ID('t') IS NOT NULL DROP TABLE tGOCREATE TABLE t( planId BIGINT PRIMARY KEY, dbIds VARCHAR(500))GO---- 插入测试数据 ----------- 要求:去除dbIds中的 12456 INSERT INTO t VALUES (1,'...原创 2018-08-22 10:57:02 · 342 阅读 · 0 评论 -
SQL Server: varbinary转varchar 及 md5 加密
参考: msdn DECLARE @s VARCHAR(50)SET @s=FORMAT(GETDATE(),'yyyyMMddHHmmss')SET @s='1|'+@s;SELECT @s AS [原串],HashBytes('MD5',@s) AS ...原创 2018-08-22 15:14:24 · 1634 阅读 · 0 评论 -
SQL Server: json 解析表值函数
Create FUNCTION [dbo].[parseJSON]( @JSON NVARCHAR(MAX)) RETURNS @hierarchy TABLE ( element_id INT IDENTITY(1, 1) NOT NULL, /* internal surrogate primary key gives the order of parsing and th...转载 2018-09-20 15:44:41 · 646 阅读 · 2 评论 -
构建序数表值函数(生成日历、年历表)
IF OBJECT_ID('dbo.Fun_GetNumList') IS NOT NULL DROP FUNCTION dbo.Fun_GetNumListGO-- =============================================-- Author: yenange-- Create date: 2018-11-26-- Description: 构建序...原创 2018-11-26 14:12:20 · 492 阅读 · 3 评论 -
标量函数:获取括号中的内容
USE tempdbGOIF OBJECT_ID('dbo.Fun_GetStrInBracket') IS NOT NULL DROP FUNCTION dbo.Fun_GetStrInBracketGO-- =============================================-- Author: yenange-- Create date: 2018-...原创 2018-12-06 10:58:38 · 528 阅读 · 0 评论 -
查CPU使用情况
----下面的查询返回过去256分钟CPU使用的历史状况,1分钟一个间隔:DECLARE @ts_now BIGINT = ( SELECT cpu_ticks / (cpu_ticks / ms_ticks) FROM sys.dm_os_sys_info WITH (NOLOCK) ); SELECT TOP(256) ...原创 2018-06-20 15:08:11 · 525 阅读 · 0 评论 -
去除字符串中的所有控制字符及去除 A到Z 之外的所有字符
IF OBJECT_ID('dbo.Fun_CutControlChars') IS NOT NULL DROP FUNCTION dbo.Fun_CutControlCharsGO-- =============================================-- Author: yenange-- Create date: 2018-06-07-- Descri...原创 2018-06-07 16:16:31 · 1608 阅读 · 0 评论 -
将字符串中的所有字符转换为ASCII码及UNICODE(特殊字符ascii)
IF OBJECT_ID('dbo.Fun_String2ASCII') IS NOT NULL DROP FUNCTION dbo.Fun_String2ASCIIGO-- =============================================-- Author: yenange-- Create date: 2018-06-07-- Description: ...原创 2018-06-07 15:56:04 · 4533 阅读 · 0 评论 -
SQLServer判断文件是否存在
DECLARE @path NVARCHAR(255)DECLARE @t TABLE (File_Exists INT,File_is_a_Directory INT,Parent_Directory_Exists INT)SET @path='d:\data.txt' --路径自己改SET NOCOUNT ONINSERT INTO @tEXEC XP_FILEEXIST @path原创 2018-03-22 08:46:12 · 1002 阅读 · 0 评论