SQL Server 数据库管理常用的SQL和T-SQL语句

时间:2021-09-02 23:59:30
  1. --按姓氏笔画排序:
  2. SELECT * FROM TableName ORDER BY CustomerName COLLATE Chinese_PRC_Stroke_ci_as
  3. --数据库加密:
  4. SELECT encrypt ( '原始密码' )
  5. SELECT pwdencrypt ( '原始密码' )
  6. SELECT pwdcompare ( '原始密码', '加密后密码' ) = 1 --相同;否则不相同 encrypt('原始密码')
  7. SELECT pwdencrypt ( '原始密码' )
  8. SELECT pwdcompare ( '原始密码', '加密后密码' ) = 1 --相同;否则不相同
  9. --取回表中字段:
  10. DECLARE @list VARCHAR ( 1000 ),@ SQL NVARCHAR ( 1000 )
  11. SELECT @list =@list + ',' +b. name FROM sysobjects a,syscolumns b WHERE a. id =b. id and a. name = '表A'
  12. SET @ SQL = 'select ' + RIGHT (@list, LEN (@list ) - 1 ) + ' from 表A'
  13. EXEC (@ SQL )
  14. --查看硬盘分区:
  15. EXEC master.. xp_fixeddrives
  16. --比较A,B表是否相等:
  17. IF ( SELECT CHECKSUM_AGG ( BINARY_CHECKSUM ( * ) ) FROM A )
  18. =
  19. ( SELECT CHECKSUM_AGG ( BINARY_CHECKSUM ( * ) ) FROM B )
  20. PRINT '相等'
  21. ELSE
  22. PRINT '不相等'
  23. --杀掉所有的事件探察器进程:
  24. DECLARE hcforeach CURSOR GLOBAL FOR SELECT 'kill ' + RTRIM (spid ) FROM master. dbo. sysprocesses
  25. WHERE program_name IN ( 'SQL profiler',N 'SQL 事件探查器' )
  26. EXEC sp_msforeach_worker '?'
  27. --记录搜索:
  28. 开头到N条记录
  29. SELECT TOP N * FROM
  30. -------------------------------
  31. N到M条记录 (要有主索引ID )
  32. SELECT TOP M -N * FROMWHERE ID in ( SELECT TOP M ID FROM) ORDER BY ID DESC
  33. ----------------------------------
  34. N到结尾记录
  35. SELECT TOP N * FROMORDER BY ID DESC
  36. --如何修改数据库的名称:
  37. SP_RENAMEDB 'old_name', 'new_name'
  38. --获取当前数据库中的所有用户表
  39. SELECT Name FROM sysobjects WHERE xtype = 'u' and status >= 0
  40. --获取某一个表的所有字段
  41. SELECT name FROM syscolumns WHERE id = OBJECT_ID ( '表名' )
  42. --查看与某一个表相关的视图、存储过程、函数
  43. SELECT a. * FROM sysobjects a, syscomments b WHERE a. id = b. id and b. TEXT like '%表名%'
  44. --查看当前数据库中所有存储过程
  45. SELECT name AS 存储过程名称 FROM sysobjects WHERE xtype = 'P'
  46. --查询用户创建的所有数据库
  47. SELECT * FROM master.. sysdatabases D WHERE sid not in ( SELECT sid FROM master.. syslogins WHERE name = 'sa' )
  48. 或者
  49. SELECT dbid, name AS DB_NAME FROM master.. sysdatabases WHERE sid <> 0x01
  50. --查询某一个表的字段和数据类型
  51. SELECT column_name,data_type FROM information_schema. columns
  52. WHERE table_name = '表名'
  53. [n ]. [标题 ]:
  54. SELECT * FROM TableName ORDER BY CustomerName
  55. [n ]. [标题 ]:
  56. SELECT * FROM TableName ORDER BY CustomerName
  57. --查看数据库的版本
  58. SELECT @@VERSION
  59. --查看数据库所在机器操作系统参数
  60. EXEC master.. XP_MSVER
  61. --查看数据库启动的参数
  62. SP_CONFIGURE
  63. --查看数据库启动时间
  64. SELECT CONVERT ( VARCHAR ( 30 ),login_time, 120 ) FROM master.. sysprocesses WHERE spid = 1
  65. 查看数据库服务器名和实例名
  66. PRINT 'Server Name...............: ' + CONVERT ( VARCHAR ( 30 ), @@SERVERNAME )
  67. PRINT 'Instance..................: ' + CONVERT ( VARCHAR ( 30 ), @@SERVICENAME )
  68. --查看所有数据库名称及大小
  69. SP_HELPDB
  70. 重命名数据库用的 SQL
  71. SP_RENAMEDB 'old_dbname', 'new_dbname'
  72. --查看所有数据库用户登录信息
  73. SP_HELPLOGINS
  74. 查看所有数据库用户所属的角色信息
  75. SP_HELPSRVROLEMEMBER
  76. 修复迁移服务器时孤立用户时,可以用的fix_orphan_user脚本或者LoneUser过程
  77. 更改某个数据对象的用户属主
  78. SP_CHANGEOBJECTOWNER [@objectname = ] 'object', [@newowner = ] 'owner'
  79. 注意: 更改对象名的任一部分都可能破坏脚本和存储过程。
  80. 把一台服务器上的数据库用户登录信息备份出来可以用add_login_to_aserver脚本
    ---------------------------------------------------------------

    1. --查看链接服务器
    2. SP_HELPLINKEDSRVLOGIN
    3. 查看远端数据库用户登录信息
    4. SP_HELPREMOTELOGIN
    5. --查看某数据库下某个数据对象的大小
    6. SP_SPACEUSED @objname
    7. 还可以用sp_toptables过程看最大的N (默认为 50 )个表
    8. 查看某数据库下某个数据对象的索引信息
    9. SP_HELPINDEX @objname
    10. 还可以用SP_NChelpindex过程查看更详细的索引情况
    11. SP_NChelpindex @objname
    12. CLUSTERED索引是把记录按物理顺序排列的,索引占的空间比较少。
    13. 对键值DML操作十分频繁的表我建议用非 CLUSTERED索引和约束, FILLFACTOR参数都用默认值。
    14. 查看某数据库下某个数据对象的的约束信息
    15. SP_HELPCONSTRAINT @objname
    16. --查看数据库里所有的存储过程和函数
    17. USE @database_name
    18. SP_STORED_PROCEDURES
    19. 查看存储过程和函数的源代码
    20. SP_HELPTEXT '@procedure_name'
    21. 查看包含某个字符串@ STR的数据对象名称
    22. SELECT DISTINCT OBJECT_NAME (id ) FROM syscomments WHERE TEXT like '%@str%'
    23. 创建加密的存储过程或函数在 AS前面加 WITH ENCRYPTION参数
    24. 解密加密过的存储过程和函数可以用sp_decrypt过程
    25. --查看数据库里用户和进程的信息
    26. SP_WHO
    27. 查看 SQL Server数据库里的活动用户和进程的信息
    28. SP_WHO 'active'
    29. 查看 SQL Server数据库里的锁的情况
    30. SP_LOCK
    31. 进程号 1 --50是SQL Server系统内部用的,进程号大于50的才是用户的连接进程.
    32. spid是进程编号,dbid是数据库编号,objid是数据对象编号
    33. 查看进程正在执行的 SQL语句
    34. DBCC inputbuffer ( )
    35. 推荐大家用经过改进后的sp_who3过程可以直接看到进程运行的 SQL语句
    36. sp_who3
    37. 检查死锁用sp_who_lock过程
    38. sp_who_lock
    39. --收缩数据库日志文件的方法
    40. 收缩简单恢复模式数据库日志,收缩后@database_name_log的大小单位为M
    41. BACKUP LOG @database_name WITH no_log
    42. DBCC shrinkfile (@database_name_log, 5 )
    43. --分析SQL Server SQL 语句的方法:
    44. SET STATISTICS TIME { ON | OFF }
    45. SET STATISTICS io { ON | OFF }
    46. 图形方式显示查询执行计划
    47. 在查询分析器 ->查询 ->显示估计的评估计划 (D ) -Ctrl -L 或者点击工具栏里的图形
    48. 文本方式显示查询执行计划
    49. SET showplan_all { ON | OFF }
    50. SET showplan_text { ON | OFF }
    51. SET STATISTICS profile { ON | OFF }
    52. --出现不一致错误时,NT事件查看器里出3624号错误,修复数据库的方法
    53. 先注释掉应用程序里引用的出现不一致性错误的表,然后在备份或其它机器上先恢复然后做修复操作
    54. ALTER DATABASE [@error_database_name ] SET single_user
    55. 修复出现不一致错误的表
    56. DBCC checktable ( '@error_table_name',repair_allow_data_loss )
    57. 或者可惜选择修复出现不一致错误的小型数据库名
    58. DBCC checkdb ( '@error_database_name',repair_allow_data_loss )
    59. ALTER DATABASE [@error_database_name ] SET multi_user
    60. CHECKDB 有 3个参数:
    61. repair_allow_data_loss 包括对行和页进行分配和取消分配以改正分配错误、结构行或页的错误,
    62. 以及删除已损坏的文本对象,这些修复可能会导致一些数据丢失。
    63. 修复操作可以在用户事务下完成以允许用户回滚所做的更改。
    64. 如果回滚修复,则数据库仍会含有错误,应该从备份进行恢复。
    65. 如果由于所提供修复等级的缘故遗漏某个错误的修复,则将遗漏任何取决于该修复的修复。
    66. 修复完成后,请备份数据库。
    67. repair_fast 进行小的、不耗时的修复操作,如修复非聚集索引中的附加键。
    68. 这些修复可以很快完成,并且不会有丢失数据的危险。
    69. repair_rebuild 执行由 repair_fast 完成的所有修复,包括需要较长时间的修复(如重建索引)。
    70. 执行这些修复时不会有丢失数据的危险。
    /*
    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;

 

 

下载