微软未公开存储过程及有用的函数

 

转自:http://blog.csdn.net/dba_huangzj/article/details/7556404

 

从网上收集,有些已经在2008不支持或者后续版本不支持,所以需要慎用。

 
  1. XP_FileExist: 
  2. 用法:EXEC xp_fileexist <filename> [, <file_exists INT> OUTPUT
  3.  
  4. 例子:exec master.dbo.xp_fileexist 'C:\temp' 
  5.  
  6. SP_MSForEachDb: 
  7. 例子1:exec dbo.sp_MSforeachdb 'select ''?'', * from [?].INFORMATION_SCHEMA.TABLES where table_name like ''authors'' ' 
  8.  
  9. 例子2:exec dbo.sp_MSforeachdb 'DBCC SHRINKDATABASE(N''?'' )' 
  10.   
  11.  
  12. SP_MSForEachTable: 
  13. 例子:exec dbo.sp_msforeachtable 'delete test.dbo.[?]' 
  14.  
  15. SP_who2: 
  16.  
  17. sp_MSdependencies: 
  18. 用法:exec dbo.sp_MSdependencies [<object name> ] , [<object type>], [<Flags>], [<objlist>] 
  19.  
  20. 例子1:exec dbo.sp_MSdependencies [<object name> ] , [<object type>], [<Flags>], [<objlist>] 
  21.  
  22. 例子2:exec sp_msdependencies 'dbo.titleview' 
  23. 例子3:exec sp_msdependencies NULL, 2 
  24. 例子4:exec sp_msdependencies 'titles', NULL, 0x401fd  
  25.  
  26. xp_dirtree: 
  27. 例子:EXEC master..xp_dirtree 'C:\MSSQL7' 
  28.  
  29.  
  30. xp_enum_oledb_providers: 
  31. 例子:EXEC master..xp_enum_oledb_providers 
  32.  
  33.  
  34. xp_enumcodepages:(2008已经没有) 
  35. 例子:EXEC master..xp_enumcodepages 
  36.  
  37.  
  38. xp_enumerrorlogs: 
  39. EXEC master..xp_enumerrorlogs 
  40.  
  41. xp_enumgroups: 
  42. EXEC master..xp_enumgroups 
  43.  
  44.  
  45. xp_fixeddrives: 
  46. EXEC master..xp_fixeddrives 
  47.  
  48. xp_getnetname: 
  49. EXEC master..xp_getnetname 
  50.  
  51. xp_readerrorlog: 
  52. EXEC master..xp_readerrorlog 
  53.  
  54.  
  55. xp_regdeletekey: 
  56. EXECUTE xp_regdeletekey [@rootkey=]'rootkey'
  57.                         [@key=]'key' 
  58.  
  59.  
  60.   
  61.  
  62. xp_regdeletevalue: 
  63. EXECUTE xp_regdeletevalue [@rootkey=]'rootkey'
  64.                           [@key=]'key'
  65.                           [@value_name=]'value_name' 
  66.  
  67.   
  68.  
  69. xp_regread: 
  70. EXECUTE xp_regread [@rootkey=]'rootkey'
  71.                    [@key=]'key' 
  72.                    [, [@value_name=]'value_name'
  73.                    [, [@value=]@value OUTPUT
  74.  
  75.  
  76.  
  77.   
  78.  
  79. xp_regwrite: 
  80. EXECUTE xp_regwrite [@rootkey=]'rootkey'
  81.                     [@key=]'key'
  82.                     [@value_name=]'value_name'
  83.                     [@type=]'type'
  84.                     [@value=]'value' 
  85.  
  86.  
  87. xp_subdirs: 
  88. EXEC master..xp_subdirs 'C:\MSSQL7' 
XP_FileExist:
用法:EXEC xp_fileexist <filename> [, <file_exists INT> OUTPUT]

例子:exec master.dbo.xp_fileexist 'C:\temp'

SP_MSForEachDb:
例子1:exec dbo.sp_MSforeachdb 'select ''?'', * from [?].INFORMATION_SCHEMA.TABLES where table_name like ''authors'' '

例子2:exec dbo.sp_MSforeachdb 'DBCC SHRINKDATABASE(N''?'' )'
 

SP_MSForEachTable:
例子:exec dbo.sp_msforeachtable 'delete test.dbo.[?]'

SP_who2:

sp_MSdependencies:
用法:exec dbo.sp_MSdependencies [<object name> ] , [<object type>], [<Flags>], [<objlist>]

例子1:exec dbo.sp_MSdependencies [<object name> ] , [<object type>], [<Flags>], [<objlist>]

例子2:exec sp_msdependencies 'dbo.titleview'
例子3:exec sp_msdependencies NULL, 2
例子4:exec sp_msdependencies 'titles', NULL, 0x401fd 

xp_dirtree:
例子:EXEC master..xp_dirtree 'C:\MSSQL7'


xp_enum_oledb_providers:
例子:EXEC master..xp_enum_oledb_providers


xp_enumcodepages:(2008已经没有)
例子:EXEC master..xp_enumcodepages


xp_enumerrorlogs:
EXEC master..xp_enumerrorlogs

xp_enumgroups:
EXEC master..xp_enumgroups


xp_fixeddrives:
EXEC master..xp_fixeddrives

xp_getnetname:
EXEC master..xp_getnetname

xp_readerrorlog:
EXEC master..xp_readerrorlog


xp_regdeletekey:
EXECUTE xp_regdeletekey [@rootkey=]'rootkey',
                        [@key=]'key'


 

xp_regdeletevalue:
EXECUTE xp_regdeletevalue [@rootkey=]'rootkey',
                          [@key=]'key',
                          [@value_name=]'value_name'

 

xp_regread:
EXECUTE xp_regread [@rootkey=]'rootkey',
                   [@key=]'key'
                   [, [@value_name=]'value_name']
                   [, [@value=]@value OUTPUT]



 

xp_regwrite:
EXECUTE xp_regwrite [@rootkey=]'rootkey',
                    [@key=]'key',
                    [@value_name=]'value_name',
                    [@type=]'type',
                    [@value=]'value'


xp_subdirs:
EXEC master..xp_subdirs 'C:\MSSQL7'


 

  1. sp_detach_db sp_setnetname 
  2. sp_dropdevice sp_settriggerorder 
  3. sp_dropextendedproc   sp_spaceused 
  4. sp_dropextendedproperty sp_tableoption 
  5. sp_dropmessage sp_unbindefault 
  6. sp_droptype sp_unbindrule 
  7. sp_executesql sp_updateextendedproperty 
  8. sp_getapplock sp_updatestats 
  9. sp_getbindtoken sp_validname 
  10. sp_help   sp_who 
  11.  
  12.  
  13. Web 助手过程   
  14. sp_dropwebtask 
  15. sp_makewebtask 
  16.  
  17.  
  18. sp_enumcodepages 
  19. sp_runwebtask 
  20.  
  21.  
  22. XML 过程   
  23. sp_xml_preparedocument 
  24. sp_xml_removedocument 
  25.  
  26.  
  27. 常规扩展过程   
  28. xp_cmdshell 
  29. xp_logininfo 
  30.  
  31.  
  32. xp_enumgroups 
  33. xp_msver 
  34.  
  35.  
  36. xp_findnextmsg 
  37. xp_revokelogin 
  38.  
  39.  
  40. xp_grantlogin 
  41. xp_sprintf 
  42.  
  43.  
  44. xp_logevent 
  45. xp_sqlmaint 
  46.  
  47.  
  48. xp_loginconfig 
  49. xp_sscanf 
  50.  
  51. API 系统存储过程 
  52. 用户在 ADO、OLE DB、ODBC 和 DB-Library 应用程序上运行 SQL Server 事件探查器时,可能会注意到系统存储过程的使用不涉及 Transact-SQL 引用。这些存储过程由用于 SQL Server 的 Microsoft OLE DB 提供程序、SQL Server ODBC 驱动程序和 DB-Library 动态链接库 (DLL) 用来执行数据库 API 功能。这些过程只不过是提供程序或驱动程序所使用的机制,用来传达用户对 SQL Server 的请求。它们仅供用于 SQL Server 的 OLE DB 提供程序、SQL Server ODBC 驱动程序和 DB-Library DLL 在内部使用。不支持从 SQL Server 应用程序显式调用它们。 
  53. 这些存储过程通过所支持的 API 函数,使得它们的全部功能均可由 SQL Sever 应用程序使用。例如,sp_cursor 系统存储过程的游标功能通过 OLE DB API 游标属性和方法可由 OLE DB 应用程序使用,通过 ODBE 游标特性和函数可由 ODBE 应用程序使用,通过 DB-library 游标库可由 DB-Library 应用程序使用。 
  54. 这些系统存储过程支持 ADO、OLE DB、ODBC 和 DB-Library 游标库的游标功能: 
  55.  
  56. sp_cursor 
  57. sp_cursorclose 
  58. sp_cursorexecute 
  59.  
  60.  
  61. sp_cursorfetch 
  62. sp_cursoropen 
  63. sp_cursoroption 
  64.  
  65.  
  66. sp_cursorprepare 
  67. sp_cursorunprepare 
  68.     
  69.  
  70. 这些系统存储过程支持 ADO、OLE DB 和 ODBC 中用于执行 Transact-SQL 语句的比较/执行模型: 
  71.  
  72. sp_execute 
  73. sp_prepare 
  74. sp_unprepare 
  75.  
  76. sp_createorphan 和 sp_droporphans 存储过程用于 ODBC ntext、text 和 image 的处理。 
  77. sp_reset_connection 存储过程由 SQL Server 用来支持事务中的远程存储过程调用。 
  78. sp_sdidebug 存储过程由 SQL Server 用来调试 Transact-SQL 语句。 
  79.    
  80. select APP_NAME ( ) --当前会话的应用程序 
  81.  
  82. select @@ERROR     --返回最后执行的 Transact-SQL 语句的错误代码(integer) 
  83.  
  84. select @@IDENTITY    --返回最后插入的标识值 
  85.  
  86. Select USER_NAME()     --返回用户数据库用户名 
  87.  
  88. select @@ERROR    --返回最后执行的 Transact-SQL 语句的错误代码 
  89.  
  90. Select @@CONNECTIONS   --返回自上次SQL启动以来连接或试图连接的次数。 
  91.  
  92. Select GETDATE() --当前时间 
  93.  
  94. Select @@CPU_BUSY/100   --返回自上次启动SQL 以来 CPU 的工作时间,单位为毫秒 
  95.  
  96. USE tempdb Select @@DBTS   --为当前数据库返回当前 timestamp 数据类型的值。这一 timestamp 值保证在数据库中是唯一的。 
  97.  
  98. select @@IDENTITY --返回最后插入的标识值 
  99.  
  100. Select @@IDLE   --返回SQL自上次启动后闲置的时间,单位为毫秒 
  101.  
  102. Select @@IO_BUSY    --返回SQL自上次启动后用于执行输入和输出操作的时间,单位为毫秒 
  103.  
  104. Select @@LANGID    --返回当前所使用语言的本地语言标识符(ID)。 
  105.  
  106. Select @@LANGUAGE    --返回当前使用的语言名 
  107.  
  108. Select @@LOCK_TIMEOUT   --当前会话的当前锁超时设置,单位为毫秒。 
  109.  
  110. Select @@MAX_CONNECTIONS   --返回SQL上允许的同时用户连接的最大数。返回的数不必为当前配置的数值 
  111.  
  112. EXEC sp_configure   --显示当前服务器的全局配置设置 
  113.  
  114. Select @@MAX_PRECISION --返回 decimal 和 numeric 数据类型所用的精度级别,即该服务器中当前设置的精度。默认最大精度38。 
  115.  
  116. select @@OPTIONS   --返回当前 SET 选项的信息。 
  117.  
  118. Select @@PACK_RECEIVED   --返回SQL自启动后从网络上读取的输入数据包数目。 
  119.  
  120. Select @@PACK_SENT   --返回SQ自上次启动后写到网络上的输出数据包数目。 
  121.  
  122. Select @@PACKET_ERRORS   --返回自SQL启动后,在SQL连接上发生的网络数据包错误数。 
  123.  
  124. Select @@SERVERNAME --返回运行SQL服务器名称。 
  125.  
  126. Select @@SERVICENAME --返回SQL正在其下运行的注册表键名 
  127.  
  128. Select @@TIMETICKS --返回SQL服务器一刻度的微秒数 
  129.  
  130. Select @@TOTAL_ERRORS   --返回 SQL服务器自启动后,所遇到的磁盘读/写错误数。 
  131.  
  132. Select @@TOTAL_READ   --返回 SQL服务器自启动后读取磁盘的次数。 
  133.  
  134. Select @@TOTAL_WRITE   --返回SQL服务器自启动后写入磁盘的次数。 
  135.  
  136. Select @@TRANCOUNT   --返回当前连接的活动事务数。 
  137.  
  138. Select @@VERSION   --返回SQL服务器安装的日期、版本和处理器类型。 
  139.  
  140. 常用的系统存储过程 
  141. •常用的sp 
  142. §sp_who 
  143. ≋查看连接用户、客户端机器、连接用的程序 
  144. ≋小心断开的连接可能继续被sp_who查出,连接池有延时 
  145. §sp_executesql 
  146. ≋执行一个T-SQL语句 
  147. ≋用以绕过某些语句要求参数为常数的检查 
  148. ‣http://gcdn.grapecity.com/cs/forums/thread/63.aspx 
  149. ‣http://xa-sps/sites/appkb/Lists/Technical%20Tips%20and%20Trciks/DispForm.aspx?ID=22 
  150. §sp_helptext 
  151. ≋     查看存储过程、视图等对象的生成脚本 
  152. •注意版本差异 
  153. §在2000中用来创建账号的系统存储过程sp_adduser, sp_addlogin, sp_dropuser, sp_droplogin等已经不推荐使用,取而代之的是Create User, Create Login, Drop User, Drop Login等命令。 
  154.  
  155. 常用的扩展存储过程 
  156. xp_cmdshell 
  157. SQL Server 2005中xp_cmdshell默认是禁用的,通过SQL Server Surface Area Configuration进行设定(~ for features) 
  158. xp_availablemedia 
  159. xp_dirtree ’C:\’,1,1 
  160.  
  161. 常用的通用函数 
  162. 元数据函数(Metadata Functions) 
  163. 数学函数(Mathematical Functions) 
  164. 汇总计算函数(Aggregate Functions) 
  165. 字符串函数(String Functions) 
  166. 日期时间函数(Date&Time Functions) 
  167. 数据类型转换函数 
  168.  
  169. 元数据函数 
  170. DB_ID(‘xxx’) 
  171. DB_Name(n) 
  172. OBJECT_ID() 
  173. OBJECT_Name() 
  174. 典型使用场景:因动态串接SQL语句而需要获取Schema信息时 
  175. 系统表sysobjects中的id字段就是object id 
  176.  
  177. 数学函数 
  178. ABS,SQRT,SIN,COS… 
  179. PI() 
  180. ROUND/FLOOR/CEILING 
  181. 小心负数! 
  182.  
  183. 汇总计算函数 
  184. SUMGroup By… 
  185. Count 
  186. MINMAXAVG 
  187.  
  188.  
  189. 字符串函数 
  190. ASCII/CHAR/STR, Unicode/NChar 
  191. CharIndex, PatIndex 
  192. SubString, Left, Right 
  193. LTrim, RTrim 
  194. Len 
  195. Lower, Upper 
  196. Replace, Stuff 
  197. Reverse 
  198.  
  199. 日期时间函数 
  200. •DateAdd 
  201. §参数可为负数,所以没有DateDec函数! 
  202. •DateDiff 
  203. •DatePart 
  204. •DateName 
  205. •GetDate, GetUTCDate 
  206. Year, Month, Day 
  207. §参数0表示1900/1/1,即Year(0) = 1900 
  208. •如何正确约束datetime范围 
  209. §小心时分秒 
  210. §典型例子:查询某个月份的数据 
  211. ≋>=当月1日 and <次月首日 
  212.  
  213. 数据类型转换函数 
  214. CASTAS 
  215. §CAST(expression AS type) 
  216. §例子: CAST(title AS char(50)) 
  217. CONVERT 
  218. §Convert(type, expression) 
  219. §例子:CONVERT(char(50), title) 
  220. •两者等效 
  221. §Use CAST rather than CONVERT if you want Transact-SQL program code to comply with SQL-92. 
  222. §Use CONVERT rather than CAST to take advantage of the style functionality in CONVERT
  223. •Style参数 
  224. §The style parameter of CONVERT provides a variety of date display formats when converting datetime data to char or varchar
  225. §Select CONVERT(char(12), GETDATE(), 3) 
  226. ≋     This statement converts the current date to style 3, dd/mm/yy. 
  227.  
  228. 其他T-SQL语句或元素 
  229. AS 别名 
  230. 同一表被多次使用 
  231. ≋典型用例:查询以月份为Column的销售报表 
  232. 查询中间结果作为FROM子句元素 
  233. SelectFROM (Select…) AS Q1 
  234. BULK Insert 
  235. 类似BCP命令行的功能 
  236. Union vs Union All 
  237. 前者相当于后者加上DISTINCT的效果 
  238. SQL SERVER 的函数 
  239. 1.字符串函数 
  240. 长度与分析用 
  241. datalength(Char_expr) 返回字符串包含字符数,但不包含后面的空格 
  242. substring(expression,start,length) 不多说了,取子串 
  243. right(char_expr,int_expr) 返回字符串右边int_expr个字符 
  244. 字符操作类 
  245. upper(char_expr) 转为大写 
  246. lower(char_expr) 转为小写 
  247. space(int_expr) 生成int_expr个空格 
  248. replicate(char_expr,int_expr)复制字符串int_expr次 
  249. reverse(char_expr) 反转字符串 
  250. stuff(char_expr1,start,length,char_expr2) 将字符串char_expr1中的从 start开始的length个字符用char_expr2代替 
  251. ltrim(char_expr) rtrim(char_expr) 取掉空格 
  252. ascii(char) char(ascii) 两函数对应,取ascii码,根据ascii吗取字符 
  253. 字符串查找 
  254. charindex(char_expr,expression) 返回char_expr的起始位置 
  255. patindex("%pattern%",expression) 返回指定模式的起始位置,否则为0 
  256. 2.数学函数 
  257. abs(numeric_expr) 求绝对值 
  258. ceiling(numeric_expr) 取大于等于指定值的最小整数 
  259. exp(float_expr) 取指数 floor(numeric_expr) 小于等于指定值得最大整数 
  260. pi() 3.1415926......... 
  261. power(numeric_expr,power) 返回power次方 
  262. rand([int_expr]) 随机数产生器 
  263. round(numeric_expr,int_expr) 安int_expr规定的精度四舍五入 
  264. sign(int_expr) 根据正数,0,负数,,返回+1,0,-1 
  265. sqrt(float_expr) 平方根 
  266. 3.日期函数 
  267. getdate() 返回日期 
  268. datename(datepart,date_expr) 返回名称如 June 
  269. datepart(datepart,date_expr) 取日期一部份 
  270. datediff(datepart,date_expr1.dateexpr2) 日期差 
  271. dateadd(datepart,number,date_expr) 返回日期加上 number 
  272. 上述函数中datepart的 写法 取值和意义 
  273. yy 1753-9999 年份 
  274. qq 1-4 刻 
  275. mm 1-12 月 
  276. dy 1-366 日 
  277. dd 1-31 日 
  278. wk 1-54 周 
  279. dw 1-7 周几 
  280. hh 0-23 小时 
  281. mi 0-59 分钟 
  282. ss 0-59 秒 
  283. ms 0-999 毫秒 
  284. 日期转换 convert() 
  285. 4.系统函数 
  286. suser_name() 用户登录名 
  287. user_name() 用户在数据库中的名字 user 用户在数据库中的名字 
  288. show_role() 对当前用户起作用的规则 
  289. db_name() 数据库名 
  290. object_name(obj_id) 数据库对象名 
  291. col_name(obj_id,col_id) 列名 
  292. col_length(objname,colname) 列长度 
  293. valid_name(char_expr) 是否是有效标识符 
  294.  
  295. --1:获取当前数据库中的所有用户表 
  296.  
  297. select Name from sysobjects where xtype='u' and status>=0 
  298.  
  299. --2:获取某一个表的所有字段 
  300.  
  301. select name from syscolumns where id=object_id(N'表名'
  302.  
  303. --3:查看与某一个表相关的视图、存储过程、函数 
  304.  
  305. select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like N'%表名%' 
  306.  
  307. --4:查看当前数据库中所有存储过程 
  308.  
  309. select name as 存储过程名称 from sysobjects where xtype='P' 
  310.  
  311. --5:查询用户创建的所有数据库 
  312.  
  313. select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa'
  314.  
  315. 或者 
  316.  
  317. select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01 
  318.  
  319. --6:查询某一个表的字段和数据类型 
  320.  
  321. select column_name,data_type from information_schema.columns 
  322. where table_name = N'表名' 
  323.  
  324. --7:获取数据库文件路径 
  325.  
  326. select ltrim(rtrim(filename)) from 数据库名..sysfiles where charindex('MDF',filename)>0 
  327. or 
  328. select ltrim(rtrim(filename)) from 数据库名..sysfiles where charindex('LDF',filename)>0 
  329.  
  330. --8:获取某一个表的基本信息 
  331.  
  332. sp_MShelpcolumns N'表名' 
  333.  
  334. --9:获取某一个表的主键、外键信息 
  335.  
  336. exec sp_pkeys N'表名' 
  337.  
  338. exec sp_fkeys    N'表名' 
  339.  
  340. --10:判断某一个表是否存在某一列(字段) 
  341.  
  342. if exists(select 1 from syscolumns where id=object_id(N'表名) and name=N'字段') 
  343.       print    N'存在' 
  344. else 
  345.       print    N'不存在' 
  346.  
  347. 下面给出了一个存储过程,它的作用是自动将当前数据库的用户存储过程加密。 
  348.  
  349. DECLARE @sp_name nvarchar(400) 
  350. DECLARE @sp_content nvarchar(2000) 
  351. DECLARE @asbegin int 
  352. declare @now datetime 
  353. select @now = getdate() 
  354. DECLARE sp_cursor CURSOR FOR 
  355. SELECT object_name(id) 
  356. FROM sysobjects 
  357. WHERE xtype = 'P' 
  358. AND type = 'P' 
  359. AND crdate < @now 
  360. AND OBJECTPROPERTY(id, 'IsMSShipped')=0 
  361.  
  362. OPEN sp_cursor 
  363.  
  364. FETCH NEXT FROM sp_cursor 
  365. INTO @sp_name 
  366.  
  367. WHILE @@FETCH_STATUS = 0 
  368. BEGIN 
  369. SELECT @sp_content = text FROM syscomments WHERE id = OBJECT_ID(@sp_name) 
  370. SELECT @asbegin = PATINDEX ( '%AS' + char(13) + '%', @sp_content) 
  371. SELECT @sp_content = SUBSTRING(@sp_content, 1, @asbegin - 1) 
  372. + ' WITH ENCRYPTION AS' 
  373. + SUBSTRING (@sp_content, @asbegin+2, LEN(@sp_content)) 
  374. SELECT @sp_name = 'DROP PROCEDURE [' + @sp_name + ']' 
  375. EXEC sp_executesql @sp_name 
  376. EXEC sp_executesql @sp_content 
  377. FETCH NEXT FROM sp_cursor 
  378. INTO @sp_name 
  379. END 
  380.  
  381. CLOSE sp_cursor 
  382. DEALLOCATE sp_cursor 
  383.  
  384. 该存储过程利用了 sysobjects 和 syscomments 表,并巧妙地修改了原存储过程的  
  385.  
  386. SQL 定义语句,将 AS 修改为了 WITH ENCRYPTION AS,从而达到了加密存储过程的目 
  387.  
  388. 的。本存储过程在 SQL Server 2000 上通过。 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值