Chinaunix首页 | 论坛 | 博客
  • 博客访问: 330119
  • 博文数量: 114
  • 博客积分: 1144
  • 博客等级: 少尉
  • 技术积分: 931
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-21 19:34
文章分类

全部博文(114)

文章存档

2012年(109)

2011年(5)

分类: 数据库开发技术

2012-09-04 18:54:07


点击(此处)折叠或打开

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

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


  3. XP_FileExist:
  4. 用法:EXEC xp_fileexist <filename> [, <file_exists INT> OUTPUT]

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

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

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


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

  11. SP_who2:

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

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

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

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


  20. xp_enum_oledb_providers:
  21. 例子:EXEC master..xp_enum_oledb_providers


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


  24. xp_enumerrorlogs:
  25. EXEC master..xp_enumerrorlogs

  26. xp_enumgroups:
  27. EXEC master..xp_enumgroups


  28. xp_fixeddrives:
  29. EXEC master..xp_fixeddrives

  30. xp_getnetname:
  31. EXEC master..xp_getnetname

  32. xp_readerrorlog:
  33. EXEC master..xp_readerrorlog


  34. xp_regdeletekey:
  35. EXECUTE xp_regdeletekey [@rootkey=]'rootkey',
  36.                         [@key=]'key'




  37. xp_regdeletevalue:
  38. EXECUTE xp_regdeletevalue [@rootkey=]'rootkey',
  39.                           [@key=]'key',
  40.                           [@value_name=]'value_name'



  41. xp_regread:
  42. EXECUTE xp_regread [@rootkey=]'rootkey',
  43.                    [@key=]'key'
  44.                    [, [@value_name=]'value_name']
  45.                    [, [@value=]@value OUTPUT]





  46. xp_regwrite:
  47. EXECUTE xp_regwrite [@rootkey=]'rootkey',
  48.                     [@key=]'key',
  49.                     [@value_name=]'value_name',
  50.                     [@type=]'type',
  51.                     [@value=]'value'


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


  54. --------------------------------------

  55. sp_detach_db sp_setnetname
  56. sp_dropdevice sp_settriggerorder
  57. sp_dropextendedproc sp_spaceused
  58. sp_dropextendedproperty sp_tableoption
  59. sp_dropmessage sp_unbindefault
  60. sp_droptype sp_unbindrule
  61. sp_executesql sp_updateextendedproperty
  62. sp_getapplock sp_updatestats
  63. sp_getbindtoken sp_validname
  64. sp_help sp_who


  65. Web 助手过程
  66. sp_dropwebtask
  67. sp_makewebtask


  68. sp_enumcodepages
  69. sp_runwebtask


  70. XML 过程
  71. sp_xml_preparedocument
  72. sp_xml_removedocument


  73. 常规扩展过程
  74. xp_cmdshell
  75. xp_logininfo


  76. xp_enumgroups
  77. xp_msver


  78. xp_findnextmsg
  79. xp_revokelogin


  80. xp_grantlogin
  81. xp_sprintf


  82. xp_logevent
  83. xp_sqlmaint


  84. xp_loginconfig
  85. xp_sscanf

  86. API 系统存储过程
  87. 用户在 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 应用程序显式调用它们。
  88. 这些存储过程通过所支持的 API 函数,使得它们的全部功能均可由 SQL Sever 应用程序使用。例如,sp_cursor 系统存储过程的游标功能通过 OLE DB API 游标属性和方法可由 OLE DB 应用程序使用,通过 ODBE 游标特性和函数可由 ODBE 应用程序使用,通过 DB-library 游标库可由 DB-Library 应用程序使用。
  89. 这些系统存储过程支持 ADO、OLE DB、ODBC 和 DB-Library 游标库的游标功能:

  90. sp_cursor
  91. sp_cursorclose
  92. sp_cursorexecute


  93. sp_cursorfetch
  94. sp_cursoropen
  95. sp_cursoroption


  96. sp_cursorprepare
  97. sp_cursorunprepare
  98.    

  99. 这些系统存储过程支持 ADO、OLE DB 和 ODBC 中用于执行 Transact-SQL 语句的比较/执行模型:

  100. sp_execute
  101. sp_prepare
  102. sp_unprepare

  103. sp_createorphan 和 sp_droporphans 存储过程用于 ODBC ntext、text 和 image 的处理。
  104. sp_reset_connection 存储过程由 SQL Server 用来支持事务中的远程存储过程调用。
  105. sp_sdidebug 存储过程由 SQL Server 用来调试 Transact-SQL 语句。
  106.   
  107. select APP_NAME ( ) --当前会话的应用程序


  108. select @@ERROR --返回最后执行的 Transact-SQL 语句的错误代码(integer)


  109. select @@IDENTITY --返回最后插入的标识值


  110. Select USER_NAME() --返回用户数据库用户名


  111. select @@ERROR --返回最后执行的 Transact-SQL 语句的错误代码


  112. Select @@CONNECTIONS --返回自上次SQL启动以来连接或试图连接的次数。


  113. Select GETDATE() --当前时间


  114. Select @@CPU_BUSY/100 --返回自上次启动SQL 以来 CPU 的工作时间,单位为毫秒


  115. USE tempdb Select @@DBTS --为当前数据库返回当前 timestamp 数据类型的值。这一 timestamp 值保证在数据库中是唯一的。


  116. select @@IDENTITY --返回最后插入的标识值


  117. Select @@IDLE --返回SQL自上次启动后闲置的时间,单位为毫秒


  118. Select @@IO_BUSY --返回SQL自上次启动后用于执行输入和输出操作的时间,单位为毫秒


  119. Select @@LANGID --返回当前所使用语言的本地语言标识符(ID)。


  120. Select @@LANGUAGE --返回当前使用的语言名


  121. Select @@LOCK_TIMEOUT --当前会话的当前锁超时设置,单位为毫秒。


  122. Select @@MAX_CONNECTIONS --返回SQL上允许的同时用户连接的最大数。返回的数不必为当前配置的数值


  123. EXEC sp_configure --显示当前服务器的全局配置设置


  124. Select @@MAX_PRECISION --返回 decimal 和 numeric 数据类型所用的精度级别,即该服务器中当前设置的精度。默认最大精度38。


  125. select @@OPTIONS --返回当前 SET 选项的信息。


  126. Select @@PACK_RECEIVED --返回SQL自启动后从网络上读取的输入数据包数目。


  127. Select @@PACK_SENT --返回SQ自上次启动后写到网络上的输出数据包数目。


  128. Select @@PACKET_ERRORS --返回自SQL启动后,在SQL连接上发生的网络数据包错误数。


  129. Select @@SERVERNAME --返回运行SQL服务器名称。


  130. Select @@SERVICENAME --返回SQL正在其下运行的注册表键名


  131. Select @@TIMETICKS --返回SQL服务器一刻度的微秒数


  132. Select @@TOTAL_ERRORS --返回 SQL服务器自启动后,所遇到的磁盘读/写错误数。


  133. Select @@TOTAL_READ --返回 SQL服务器自启动后读取磁盘的次数。


  134. Select @@TOTAL_WRITE --返回SQL服务器自启动后写入磁盘的次数。


  135. Select @@TRANCOUNT --返回当前连接的活动事务数。


  136. Select @@VERSION --返回SQL服务器安装的日期、版本和处理器类型。


  137. 常用的系统存储过程
  138. ?常用的sp
  139. §sp_who
  140. ?查看连接用户、客户端机器、连接用的程序
  141. ?小心断开的连接可能继续被sp_who查出,连接池有延时
  142. §sp_executesql
  143. ?执行一个T-SQL语句
  144. ?用以绕过某些语句要求参数为常数的检查
  145. ?http://gcdn.grapecity.com/cs/forums/thread/63.aspx
  146. ?http://xa-sps/sites/appkb/Lists/Technical%20Tips%20and%20Trciks/DispForm.aspx?ID=22
  147. §sp_helptext
  148. ? 查看存储过程、视图等对象的生成脚本
  149. ?注意版本差异
  150. §在2000中用来创建账号的系统存储过程sp_adduser, sp_addlogin, sp_dropuser, sp_droplogin等已经不推荐使用,取而代之的是Create User, Create Login, Drop User, Drop Login等命令。

  151. 常用的扩展存储过程
  152. xp_cmdshell
  153. SQL Server 2005中xp_cmdshell默认是禁用的,通过SQL Server Surface Area Configuration进行设定(~ for features)
  154. xp_availablemedia
  155. xp_dirtree ’C:\,1,1

  156. 常用的通用函数
  157. 元数据函数(Metadata Functions)
  158. 数学函数(Mathematical Functions)
  159. 汇总计算函数(Aggregate Functions)
  160. 字符串函数(String Functions)
  161. 日期时间函数(Date&Time Functions)
  162. 数据类型转换函数

  163. 元数据函数
  164. DB_ID(‘xxx’)
  165. DB_Name(n)
  166. OBJECT_ID()
  167. OBJECT_Name()
  168. 典型使用场景:因动态串接SQL语句而需要获取Schema信息时
  169. 系统表sysobjects中的id字段就是object id

  170. 数学函数
  171. ABS,SQRT,SIN,COS…
  172. PI()
  173. ROUND/FLOOR/CEILING
  174. 小心负数!

  175. 汇总计算函数
  176. SUM…Group By…
  177. Count
  178. MIN,MAX,AVG


  179. 字符串函数
  180. ASCII/CHAR/STR, Unicode/NChar
  181. CharIndex, PatIndex
  182. SubString, Left, Right
  183. LTrim, RTrim
  184. Len
  185. Lower, Upper
  186. Replace, Stuff
  187. Reverse

  188. 日期时间函数
  189. ?DateAdd
  190. §参数可为负数,所以没有DateDec函数!
  191. ?DateDiff
  192. ?DatePart
  193. ?DateName
  194. ?GetDate, GetUTCDate
  195. ?Year, Month, Day
  196. §参数0表示1900/1/1,即Year(0) = 1900
  197. ?如何正确约束datetime范围
  198. §小心时分秒
  199. §典型例子:查询某个月份的数据
  200. ?>=当月1日 and <次月首日

  201. 数据类型转换函数
  202. ?CAST…AS
  203. §CAST(expression AS type)
  204. §例子: CAST(title AS char(50))
  205. ?CONVERT
  206. §Convert(type, expression)
  207. §例子:CONVERT(char(50), title)
  208. ?两者等效
  209. §Use CAST rather than CONVERT if you want Transact-SQL program code to comply with SQL-92.
  210. §Use CONVERT rather than CAST to take advantage of the style functionality in CONVERT.
  211. ?Style参数
  212. §The style parameter of CONVERT provides a variety of date display formats when converting datetime data to char or varchar.
  213. §Select CONVERT(char(12), GETDATE(), 3)
  214. ? This statement converts the current date to style 3, dd/mm/yy.

  215. 其他T-SQL语句或元素
  216. AS 别名
  217. 同一表被多次使用
  218. ?典型用例:查询以月份为Column的销售报表
  219. 查询中间结果作为FROM子句元素
  220. ?Select …FROM (Select…) AS Q1
  221. BULK Insert
  222. 类似BCP命令行的功能
  223. Union vs Union All
  224. 前者相当于后者加上DISTINCT的效果
  225. SQL SERVER 的函数
  226. 1.字符串函数
  227. 长度与分析用
  228. datalength(Char_expr) 返回字符串包含字符数,但不包含后面的空格
  229. substring(expression,start,length) 不多说了,取子串
  230. right(char_expr,int_expr) 返回字符串右边int_expr个字符
  231. 字符操作类
  232. upper(char_expr) 转为大写
  233. lower(char_expr) 转为小写
  234. space(int_expr) 生成int_expr个空格
  235. replicate(char_expr,int_expr)复制字符串int_expr次
  236. reverse(char_expr) 反转字符串
  237. stuff(char_expr1,start,length,char_expr2) 将字符串char_expr1中的从 start开始的length个字符用char_expr2代替
  238. ltrim(char_expr) rtrim(char_expr) 取掉空格
  239. ascii(char) char(ascii) 两函数对应,取ascii码,根据ascii吗取字符
  240. 字符串查找
  241. charindex(char_expr,expression) 返回char_expr的起始位置
  242. patindex("%pattern%",expression) 返回指定模式的起始位置,否则为0
  243. 2.数学函数
  244. abs(numeric_expr) 求绝对值
  245. ceiling(numeric_expr) 取大于等于指定值的最小整数
  246. exp(float_expr) 取指数 floor(numeric_expr) 小于等于指定值得最大整数
  247. pi() 3.1415926.........
  248. power(numeric_expr,power) 返回power次方
  249. rand([int_expr]) 随机数产生器
  250. round(numeric_expr,int_expr) 安int_expr规定的精度四舍五入
  251. sign(int_expr) 根据正数,0,负数,,返回+1,0,-1
  252. sqrt(float_expr) 平方根
  253. 3.日期函数
  254. getdate() 返回日期
  255. datename(datepart,date_expr) 返回名称如 June
  256. datepart(datepart,date_expr) 取日期一部份
  257. datediff(datepart,date_expr1.dateexpr2) 日期差
  258. dateadd(datepart,number,date_expr) 返回日期加上 number
  259. 上述函数中datepart的 写法 取值和意义
  260. yy 1753-9999 年份
  261. qq 1-4 刻
  262. mm 1-12 月
  263. dy 1-366 日
  264. dd 1-31 日
  265. wk 1-54 周
  266. dw 1-7 周几
  267. hh 0-23 小时
  268. mi 0-59 分钟
  269. ss 0-59 秒
  270. ms 0-999 毫秒
  271. 日期转换 convert()
  272. 4.系统函数
  273. suser_name() 用户登录名
  274. user_name() 用户在数据库中的名字 user 用户在数据库中的名字
  275. show_role() 对当前用户起作用的规则
  276. db_name() 数据库名
  277. object_name(obj_id) 数据库对象名
  278. col_name(obj_id,col_id) 列名
  279. col_length(objname,colname) 列长度
  280. valid_name(char_expr) 是否是有效标识符

  281. --1:获取当前数据库中的所有用户表


  282. select Name from sysobjects where xtype='u' and status>=0

  283. --2:获取某一个表的所有字段


  284. select name from syscolumns where id=object_id(N'表名')

  285. --3:查看与某一个表相关的视图、存储过程、函数


  286. select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like N'%表名%'

  287. --4:查看当前数据库中所有存储过程


  288. select name as 存储过程名称 from sysobjects where xtype='P'

  289. --5:查询用户创建的所有数据库


  290. select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa')

  291. 或者

  292. select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01

  293. --6:查询某一个表的字段和数据类型


  294. select column_name,data_type from information_schema.columns
  295. where table_name = N'表名'

  296. --7:获取数据库文件路径


  297. select ltrim(rtrim(filename)) from 数据库名..sysfiles where charindex('MDF',filename)>0
  298. or
  299. select ltrim(rtrim(filename)) from 数据库名..sysfiles where charindex('LDF',filename)>0

  300. --8:获取某一个表的基本信息


  301. sp_MShelpcolumns N'表名'

  302. --9:获取某一个表的主键、外键信息


  303. exec sp_pkeys N'表名'

  304. exec sp_fkeys N'表名'

  305. --10:判断某一个表是否存在某一列(字段)


  306. if exists(select 1 from syscolumns where id=object_id(N'表名) and name=N'字段')
  307.       print N'存在'
  308. else
  309.       print N'不存在'

  310. 下面给出了一个存储过程,它的作用是自动将当前数据库的用户存储过程加密。

  311. DECLARE @sp_name nvarchar(400)
  312. DECLARE @sp_content nvarchar(2000)
  313. DECLARE @asbegin int
  314. declare @now datetime
  315. select @now = getdate()
  316. DECLARE sp_cursor CURSOR FOR
  317. SELECT object_name(id)
  318. FROM sysobjects
  319. WHERE xtype = 'P'
  320. AND type = 'P'
  321. AND crdate < @now
  322. AND OBJECTPROPERTY(id, 'IsMSShipped')=0

  323. OPEN sp_cursor

  324. FETCH NEXT FROM sp_cursor
  325. INTO @sp_name

  326. WHILE @@FETCH_STATUS = 0
  327. BEGIN
  328. SELECT @sp_content = text FROM syscomments WHERE id = OBJECT_ID(@sp_name)
  329. SELECT @asbegin = PATINDEX ( '%AS' + char(13) + '%', @sp_content)
  330. SELECT @sp_content = SUBSTRING(@sp_content, 1, @asbegin - 1)
  331. + ' WITH ENCRYPTION AS'
  332. + SUBSTRING (@sp_content, @asbegin+2, LEN(@sp_content))
  333. SELECT @sp_name = 'DROP PROCEDURE [' + @sp_name + ']

阅读(2457) | 评论(0) | 转发(0) |
0

上一篇:行转列或列转行写法

下一篇:Tools

给主人留下些什么吧!~~