SQL脚本编程范本.sql 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1.  
  2. -- ============================================= 
  3. -- SQL 脚本规范示例 
  4. -- 建立日期:2008-01-14 
  5. -- 编 写 者:唐根平 
  6. -- 版    本: V1.0 
  7. -- ============================================= 
  8.  
  9. /* 在每个存储过程、函数、触发器、视图前均需以下这段注释,每个完整的脚本文件头也需要如上所示的注释 */ 
  10. -- ============================================= 
  11. -- 程序编写: <你的中文姓名> 
  12. -- 建立日期: <yyyy-mm-dd> 
  13. -- 功能说明: <说明本模块或本脚本的功能> 
  14. -- 备    注: <可选,如有其它要特别强调或说明的请加此行;如没有则可省略此行> 
  15. -- 调用示例: <如果是存储过程、函数则需要此行> 
  16. -- 程序修改: <可选> 
  17. -- 修改日期: <可选> 
  18. -- 修改说明: <可选,每修改一次,请重复本行及上述二行一次> 
  19. -- 程序修改: <可选> 
  20. -- 修改日期: <可选> 
  21. -- 修改说明: <可选,每修改一次,请重复本行及上述二行一次> 
  22. -- =============================================  
  23. --**********************************************-- 
  24. PRINT '描述接下来的若干段语句的功用,例:开始…………' 
  25. --**********************************************-- 
  26. IF EXISTS(某判断) BEGIN  
  27. --执行操作1   
  28. --执行操作2 
  29.  END  
  30. IF NOT EXISTS(某判断) BEGIN  
  31. --执行操作3   
  32. --执行操作4  
  33. END  
  34. --执行操作5 
  35. GO
  36. --**********************************************-- 
  37. PRINT '结束…………' 
  38. --**********************************************--  
  39. --**********************************************-- 
  40. PRINT '描述本段语句的功能,例:建立表[……]' 
  41. --**********************************************-- 
  42. IF NOT EXISTS(SELECT * FROM SYSOBJECTS WHERE NAME=N'表名')  
  43. CREATE TABLE 表名(   
  44. [字段名1] [varchar](10) NOT NULL,  
  45. [字段名2] [numeric](5, 0) NOT NULL, 
  46.      …………,    
  47. [字段名N] [varchar](10)  
  48. ) GO 
  49.  
  50. --**********************************************-- 
  51. PRINT '新增字段[……],默认值为……,字段含义为……' 
  52. --**********************************************-- 
  53. IF NOT EXISTS(SELECT * FROM syscolumns WHERE id=object_id('表名') and NAME='字段名')  
  54. ALTER TABLE [表名] ADD [字段名] [字段类型] CONSTRAINT 默认值约束名 DEFAULT 默认值 
  55. ELSE  
  56. ALTER TABLE [表名] ALTER COLUMN [字段名] [字段类型] CONSTRAINT 默认值约束名 
  57. DEFAULT 默认值 
  58. GO 
  59.  
  60. --**********************************************-- 
  61. PRINT '建立索引[……]' 
  62. --**********************************************-- 
  63. IF  EXISTS (SELECT * FROM sysindexes WHERE name = N'索引名' AND id = object_id(N'表名'))  
  64. DROP INDEX [表名].[索引名] 
  65. GO 
  66.  
  67. CREATE INDEX [索引名] ON [表名] ([字段名]) 
  68. GO 
  69.  
  70. --**********************************************-- 
  71. PRINT '建立视图[……]' 
  72. --**********************************************-- 
  73. IF  EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'视图名') and OBJECTPROPERTY(id, N'IsView') = 1)  
  74. DROP VIEW [视图名] 
  75. GO 
  76. -- ============================================= 
  77. -- 程序编写: <你的中文姓名> 
  78. -- 建立日期: <yyyy-mm-dd> 
  79. -- 功能说明: <说明本模块或本脚本的功能> 
  80. -- 备    注: <可选,如有其它要特别强调或说明的请加此行;如没有则可省略此行> 
  81. -- ============================================= 
  82. CREATE VIEW [视图名] AS  
  83. --你的SELECT语句  
  84. SELECT …… FROM …… 
  85. GO 
  86.  
  87. --**********************************************-- 
  88. PRINT '建立存储过程[…………]' 
  89. --**********************************************-- 
  90. IF  EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'存储过程名') AND OBJECTPROPERTY(id, N'IsProcedure') = 1)  
  91. DROP PROCEDURE [存储过程名] 
  92. GO  
  93. -- ============================================= 
  94. -- 程序编写: <你的中文姓名> 
  95. -- 建立日期: <yyyy-mm-dd> 
  96. -- 功能说明: <说明本模块或本脚本的功能> 
  97. -- 备    注: <可选,如有其它要特别强调或说明的请加此行;如没有则可省略此行> 
  98. -- 调用示例: <如果是存储过程、函数则需要此行> 
  99. -- ============================================= 
  100. CREATE PROCEDURE [存储过程名]  
  101. @参数1   参数1类型,   --参数1含义说明  
  102. @参数2   参数2类型,   --参数2含义说明  
  103. ………… 
  104.   @参数N   参数N类型    --参数N含义说明 
  105. AS 
  106. BEGIN  
  107. --关闭中间过程的统计信息  
  108. SET NOCOUNT ON   
  109. --定义变量 
  110.   DECLARE @sql NVarchar(4000)   
  111. --进行你自己的操作 
  112. --处理结束,如要在中途退出存储过程,则可直接调用RETURN 
  113.   --RETURN 
  114. END 
  115. GO
  116. --**********************************************-- 
  117. PRINT '建立函数[…………]' 
  118. --**********************************************-- 
  119. IF  EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'标量值函数名') AND xtype in (N'FN', N'IF', N'TF'))  
  120. DROP FUNCTION [标量值函数名] 
  121. GO 
  122.  
  123. -- ============================================= 
  124. -- 程序编写: <你的中文姓名> 
  125. -- 建立日期: <yyyy-mm-dd> 
  126. -- 功能说明: <说明本模块或本脚本的功能> 
  127. -- 备    注: <可选,如有其它要特别强调或说明的请加此行;如没有则可省略此行> 
  128. -- 调用示例: SELECT dbo.[标量值函数名](参数1) 
  129. -- ============================================= 
  130. CREATE FUNCTION [标量值函数名] 
  131. (  
  132. @参数1   参数1类型   --参数1含义说明
  133. RETURNS 返回值类型 
  134. AS 
  135. BEGIN  
  136. --定义返回变量 
  137.   DECLARE @ResultVar 返回值类型   
  138. --给返回变量赋值  
  139. SET @ResultVar = ……   
  140. --返回函数计算结果 
  141.   RETURN @ResultVar 
  142. END 
  143. GO 
  144.  
  145. --**********************************************-- 
  146. PRINT '建立函数[…………]' 
  147. --**********************************************-- 
  148. IF  EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'内联表值函数名') AND xtype in (N'FN', N'IF', N'TF'))  
  149. DROP FUNCTION [内联表值函数名]
  150.  GO 
  151.  
  152. -- ============================================= 
  153. -- 程序编写: <你的中文姓名> 
  154. -- 建立日期: <yyyy-mm-dd> 
  155. -- 功能说明: <说明本模块或本脚本的功能> 
  156. -- 备    注: <可选,如有其它要特别强调或说明的请加此行;如没有则可省略此行> 
  157. -- 调用示例: SELECT * FROM dbo.[内联表值函数名](参数1) 
  158. -- ============================================= 
  159. CREATE FUNCTION [内联表值函数名]  
  160. (  
  161. @参数1   参数1类型   --参数1含义说明 
  162. RETURNS TABLE 
  163. AS 
  164. RETURN  
  165. (  
  166. --用一条SELECT语句返回结果,此种函数可相当于带参数的视图使用  
  167. SELECT * FROM [某表] WHERE 某字段 = @参数1 
  168. GO 
  169.  
  170. --**********************************************-- 
  171. PRINT '建立函数[…………]' 
  172. --**********************************************-- 
  173. IF  EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'多语句表值函数函数名') AND xtype in (N'FN', N'IF', N'TF')) 
  174. DROP FUNCTION [多语句表值函数函数名] 
  175. GO  
  176. -- ============================================= 
  177. -- 程序编写: <你的中文姓名> 
  178. -- 建立日期: <yyyy-mm-dd> 
  179. -- 功能说明: <说明本模块或本脚本的功能> 
  180. -- 备    注: <可选,如有其它要特别强调或说明的请加此行;如没有则可省略此行> 
  181. -- 调用示例: SELECT * FROM dbo.[多语句表值函数函数名](参数1) 
  182. -- ============================================= 
  183. CREATE FUNCTION [多语句表值函数函数名]  
  184. (  
  185. @参数1   参数1类型   --参数1含义说明 
  186. RETURNS   
  187. @多语句表值函数的虚拟表名 TABLE   
  188. (
  189. [字段名1] 字段类型1, --含义说明
  190. [字段名1] 字段类型2 --含义说明 
  191.   ) 
  192. AS 
  193. BEGIN  
  194. --往虚拟表中插入记录 
  195.     INSERT INTO @多语句表值函数的虚拟表名 VALUES (值1,值2)   
  196. --返回最后的结果  
  197. RETURN  
  198. END 
  199. GO  
  200. --**********************************************-- 
  201. PRINT '建立触发器[…………]' 
  202. --**********************************************-- 
  203. IF  EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'触发器名') AND xtype in (N'TR'))  
  204. DROP TRIGGER [触发器名] 
  205. GO  
  206. -- ============================================= 
  207. -- 程序编写: <你的中文姓名> 
  208. -- 建立日期: <yyyy-mm-dd> 
  209. -- 功能说明: <说明本模块或本脚本的功能> 
  210. -- 备    注: <可选,如有其它要特别强调或说明的请加此行;如没有则可省略此行> 
  211. -- ============================================= 
  212. CREATE TRIGGER [触发器名]   
  213. ON  表名 
  214.   <AFTER 或 FOR>  <INSERT 或 DELETE 或 UPDATE> 
  215. AS  
  216. BEGIN  
  217. SET NOCOUNT ON;  
  218.     
  219. --插入触发器内部执行语句 
  220.  
  221. END 
  222. GO  
  223. --**********************************************-- 
  224. PRINT '描述接下来的若干段语句的功用,例:开始处理……数据' 
  225. --**********************************************-- 
  226. PRINT '往表[表名]中插入或修改记录' 
  227. IF NOT EXISTS (SELECT * FROM 表名 WHERE 主键字段 = '某值')  
  228. INSERT INTO 表名 (字段列表)   
  229. VALUES (值列表)
  230. ELSE
  231. UPDATE 表名 SET 字段名1 = 值1,字段名2 = 值2,……
  232. WHERE 主键字段 = '某值'
  233. GO
  234. --**********************************************--
  235. PRINT '结束…………'
  236. --**********************************************--
  237. --**********************************************--
  238. PRINT '--所有操作结束--'
  239. --**********************************************--