SQL Server 数据库管理常用的SQL和T-SQL语句
-
--按姓氏笔画排序:
-
SELECT*FROM TableName ORDERBY CustomerName COLLATE Chinese_PRC_Stroke_ci_as
-
--数据库加密:
-
SELECT encrypt('原始密码')
-
SELECT pwdencrypt('原始密码')
-
SELECT pwdcompare('原始密码','加密后密码')=1--相同;否则不相同 encrypt('原始密码')
-
SELECT pwdencrypt('原始密码')
-
SELECT pwdcompare('原始密码','加密后密码')=1--相同;否则不相同
-
--取回表中字段:
-
DECLARE @list VARCHAR(1000),@SQLNVARCHAR(1000)
-
SELECT @list=@list+','+b.nameFROM sysobjects a,syscolumns b WHERE a.id=b.id and a.name='表A'
-
SET @SQL='select '+RIGHT(@list,LEN(@list)-1)+' from 表A'
-
EXEC(@SQL)
-
--查看硬盘分区:
-
EXEC master..xp_fixeddrives
-
--比较A,B表是否相等:
-
IF(SELECTCHECKSUM_AGG(BINARY_CHECKSUM(*))FROM A)
-
=
-
(SELECTCHECKSUM_AGG(BINARY_CHECKSUM(*))FROM B)
-
PRINT'相等'
-
ELSE
-
PRINT'不相等'
-
--杀掉所有的事件探察器进程:
-
DECLARE hcforeach CURSORGLOBALFORSELECT'kill '+RTRIM(spid)FROM master.dbo.sysprocesses
-
WHERE program_name IN('SQL profiler',N'SQL 事件探查器')
-
EXEC sp_msforeach_worker '?'
-
--记录搜索:
-
开头到N条记录
-
SELECTTOP N *FROM 表
-
-------------------------------
-
N到M条记录(要有主索引ID)
-
SELECTTOP M-N *FROM 表 WHERE ID in (SELECTTOP M ID FROM 表)ORDERBY ID DESC
-
----------------------------------
-
N到结尾记录
-
SELECTTOP N *FROM 表 ORDERBY ID DESC
-
--如何修改数据库的名称:
-
SP_RENAMEDB'old_name', 'new_name'
-
--获取当前数据库中的所有用户表
-
SELECT Name FROM sysobjects WHERE xtype='u' and status>=0
-
--获取某一个表的所有字段
-
SELECT name FROM syscolumns WHERE id=OBJECT_ID('表名')
-
--查看与某一个表相关的视图、存储过程、函数
-
SELECT a.*FROM sysobjects a, syscomments b WHERE a.id= b.id and b.TEXT like '%表名%'
-
--查看当前数据库中所有存储过程
-
SELECT name AS 存储过程名称 FROM sysobjects WHERE xtype='P'
-
--查询用户创建的所有数据库
-
SELECT*FROM master..sysdatabases D WHERE sid not in(SELECT sid FROM master..sysloginsWHERE name='sa')
-
或者
-
SELECT dbid, name ASDB_NAMEFROM master..sysdatabasesWHERE sid <> 0x01
-
--查询某一个表的字段和数据类型
-
SELECT column_name,data_type FROM information_schema.columns
-
WHERE table_name ='表名'
-
[n].[标题]:
-
SELECT*FROM TableName ORDERBY CustomerName
-
[n].[标题]:
-
SELECT*FROM TableName ORDERBY CustomerName
-
--查看数据库的版本
-
SELECT@@VERSION
-
--查看数据库所在机器操作系统参数
-
EXEC master..XP_MSVER
-
--查看数据库启动的参数
-
SP_CONFIGURE
-
--查看数据库启动时间
-
SELECTCONVERT(VARCHAR(30),login_time,120)FROM master..sysprocessesWHERE spid=1
-
查看数据库服务器名和实例名
-
PRINT'Server Name...............: '+CONVERT(VARCHAR(30),@@SERVERNAME)
-
PRINT'Instance..................: '+CONVERT(VARCHAR(30),@@SERVICENAME)
-
--查看所有数据库名称及大小
-
SP_HELPDB
-
重命名数据库用的SQL
-
SP_RENAMEDB'old_dbname', 'new_dbname'
-
--查看所有数据库用户登录信息
-
SP_HELPLOGINS
-
查看所有数据库用户所属的角色信息
-
SP_HELPSRVROLEMEMBER
-
修复迁移服务器时孤立用户时,可以用的fix_orphan_user脚本或者LoneUser过程
-
更改某个数据对象的用户属主
-
SP_CHANGEOBJECTOWNER[@objectname =]'object', [@newowner =]'owner'
-
注意: 更改对象名的任一部分都可能破坏脚本和存储过程。
-
把一台服务器上的数据库用户登录信息备份出来可以用add_login_to_aserver脚本
---------------------------------------------------------------- --查看链接服务器
-
SP_HELPLINKEDSRVLOGIN
-
查看远端数据库用户登录信息
-
SP_HELPREMOTELOGIN
-
--查看某数据库下某个数据对象的大小
-
SP_SPACEUSED @objname
-
还可以用sp_toptables过程看最大的N(默认为50)个表
-
查看某数据库下某个数据对象的索引信息
-
SP_HELPINDEX @objname
-
还可以用SP_NChelpindex过程查看更详细的索引情况
-
SP_NChelpindex @objname
-
CLUSTERED索引是把记录按物理顺序排列的,索引占的空间比较少。
-
对键值DML操作十分频繁的表我建议用非CLUSTERED索引和约束,FILLFACTOR参数都用默认值。
-
查看某数据库下某个数据对象的的约束信息
-
SP_HELPCONSTRAINT @objname
-
--查看数据库里所有的存储过程和函数
-
USE @database_name
-
SP_STORED_PROCEDURES
-
查看存储过程和函数的源代码
-
SP_HELPTEXT'@procedure_name'
-
查看包含某个字符串@STR的数据对象名称
-
SELECTDISTINCTOBJECT_NAME(id)FROM syscomments WHERETEXT like '%@str%'
-
创建加密的存储过程或函数在AS前面加WITH ENCRYPTION参数
-
解密加密过的存储过程和函数可以用sp_decrypt过程
-
--查看数据库里用户和进程的信息
-
SP_WHO
-
查看SQL Server数据库里的活动用户和进程的信息
-
SP_WHO'active'
-
查看SQL Server数据库里的锁的情况
-
SP_LOCK
-
进程号1--50是SQL Server系统内部用的,进程号大于50的才是用户的连接进程.
-
spid是进程编号,dbid是数据库编号,objid是数据对象编号
-
查看进程正在执行的SQL语句
-
DBCC inputbuffer ()
-
推荐大家用经过改进后的sp_who3过程可以直接看到进程运行的SQL语句
-
sp_who3
-
检查死锁用sp_who_lock过程
-
sp_who_lock
-
--收缩数据库日志文件的方法
-
收缩简单恢复模式数据库日志,收缩后@database_name_log的大小单位为M
-
BACKUPLOG @database_name WITH no_log
-
DBCC shrinkfile (@database_name_log, 5)
-
--分析SQL Server SQL 语句的方法:
-
SETSTATISTICSTIME{ON|OFF}
-
SETSTATISTICS io {ON|OFF}
-
图形方式显示查询执行计划
-
在查询分析器->查询->显示估计的评估计划(D)-Ctrl-L 或者点击工具栏里的图形
-
文本方式显示查询执行计划
-
SET showplan_all {ON|OFF}
-
SET showplan_text {ON|OFF}
-
SETSTATISTICS profile {ON|OFF}
-
--出现不一致错误时,NT事件查看器里出3624号错误,修复数据库的方法
-
先注释掉应用程序里引用的出现不一致性错误的表,然后在备份或其它机器上先恢复然后做修复操作
-
ALTERDATABASE[@error_database_name]SET single_user
-
修复出现不一致错误的表
-
DBCC checktable('@error_table_name',repair_allow_data_loss)
-
或者可惜选择修复出现不一致错误的小型数据库名
-
DBCC checkdb('@error_database_name',repair_allow_data_loss)
-
ALTERDATABASE[@error_database_name]SET multi_user
-
CHECKDB 有3个参数:
-
repair_allow_data_loss 包括对行和页进行分配和取消分配以改正分配错误、结构行或页的错误,
-
以及删除已损坏的文本对象,这些修复可能会导致一些数据丢失。
-
修复操作可以在用户事务下完成以允许用户回滚所做的更改。
-
如果回滚修复,则数据库仍会含有错误,应该从备份进行恢复。
-
如果由于所提供修复等级的缘故遗漏某个错误的修复,则将遗漏任何取决于该修复的修复。
-
修复完成后,请备份数据库。
-
repair_fast 进行小的、不耗时的修复操作,如修复非聚集索引中的附加键。
-
这些修复可以很快完成,并且不会有丢失数据的危险。
-
repair_rebuild 执行由 repair_fast 完成的所有修复,包括需要较长时间的修复(如重建索引)。
-
执行这些修复时不会有丢失数据的危险。
/*
getdate() 获取当前时间,
datename(datepart,date) 返回datepart指定字符串格式的时间
datepart(datepart,date) 返回datepart指定字整形格式的时间
*/
select getdate(), datename(mm,getdate()), datepart(mm,getdate())
/*isdate(str) 为真返回1 为假则为0 */
select isdate('2009/1/02')
select ceiling(12.3) --取最大整数
select floor(12.3) --取最小整数
select len(getdate()) --获取字符串长度
select left('abcdef',4),right(123456,4) --left 获取字符串从左开始的指定长度
-----right 获取字符串从右边开始的指定长度
select substring('abcdefghijklmn' ,2 ,6) --bcdefg 获取指定起点跟终点的长度
select replicate('wk',3) --按照指定次数复制字符串
select ltrim( ' 123') , rtrim('add ') --取出字符串左,右空格
select reverse('abcde') --edcba 获取一个反序的字符串
--------------****数据库时间格式****----------------
select dateadd(year,2,'2004-10-17') --加两年
select datediff(day,'2006-10-10','2006-12-18') -- 判断天差
分类拼接字符串
---1、 建立临时表-- SELECT * INTO temp_CombineBuying FROM (SELECT b.ProviderTypeShortName,a.ProviderGUID,b.ProviderTypeCode FROM p_provider2Type a INNER JOIN p_ProviderType b ON a.ProviderTypeCode=b.ProviderTypeCode) t ----- 2、拼接字符串 --- SELECT ProviderGUID, stuff( (select ','+convert(varchar(25), ProviderTypeShortName) from temp_CombineBuying as t2 WHERE t2.ProviderGUID=t1.ProviderGUID FOR XML PATH('')), 1, 1, '' ) as ProviderTypeNameList INTO p_ProviderTypeNameList FROM temp_CombineBuying AS t1 GROUP BY ProviderGUID ----- 3、清除临时表 DROP TABLE temp_CombineBuying; DROP TABLE p_ProviderTypeNameList;
一只站在树上的鸟儿,从来不会害怕树枝会断裂,因为它相信的不是树枝,而是它自己的翅膀。与其每天担心未来,不如努力做好现在。