当前位置:Gxlcms > mysql > SQLServer存储过程Print

SQLServer存储过程Print

时间:2021-07-01 10:21:17 帮助过:144人阅读

SQLServer 存储过程,打印其他存储过程或函数对象的创建语句 代码来源于系统自带的存储过程 无 Create PROCEDURE [dbo].[sp_PrintProc] @objname NVARCHAR(776) , @columnname SYSNAME = NULLAS --打印对象 SET nocount ON DECLARE @dbname SYSNAME , @objid

SQLServer 存储过程,打印其他存储过程或函数对象的创建语句
代码来源于系统自带的存储过程

<无>
  1. Create PROCEDURE [dbo].[sp_PrintProc]
  2. @objname NVARCHAR(776) ,
  3. @columnname SYSNAME = NULL
  4. AS
  5. --打印对象
  6. SET nocount ON
  7. DECLARE @dbname SYSNAME ,
  8. @objid INT ,
  9. @BlankSpaceAdded INT ,
  10. @BasePos INT ,
  11. @CurrentPos INT ,
  12. @TextLength INT ,
  13. @LineId INT ,
  14. @AddOnLen INT ,
  15. @LFCR INT --lengths of line feed carriage return
  16. ,
  17. @DefinedLength INT
  18. /* NOTE: Length of @SyscomText is 4000 to replace the length of
  19. ** text column in syscomments.
  20. ** lengths on @Line, #CommentText Text column and
  21. ** value for @DefinedLength are all 2550. These need to all have
  22. ** the same values. 2550 was selected in order for the max length
  23. ** display using down level clients
  24. */ ,
  25. @SyscomText NVARCHAR(4000) ,
  26. @Line NVARCHAR(2550)
  27. SELECT @DefinedLength = 2550
  28. SELECT @BlankSpaceAdded = 0 /*Keeps track of blank spaces at end of lines. Note Len function ignores
  29. trailing blank spaces*/
  30. CREATE TABLE #CommentText
  31. (
  32. LineId INT ,
  33. Text NVARCHAR(2550) COLLATE database_default
  34. )
  35. /*
  36. ** Make sure the @objname is local to the current database.
  37. */
  38. SELECT @dbname = PARSENAME(@objname, 3)
  39. IF @dbname IS NULL
  40. SELECT @dbname = DB_NAME()
  41. ELSE
  42. IF @dbname <> DB_NAME()
  43. BEGIN
  44. RAISERROR(15250,-1,-1)
  45. RETURN (1)
  46. END
  47. /*
  48. ** See if @objname exists.
  49. */
  50. SELECT @objid = OBJECT_ID(@objname)
  51. IF ( @objid IS NULL )
  52. BEGIN
  53. RAISERROR(15009,-1,-1,@objname,@dbname)
  54. RETURN (1)
  55. END
  56. -- If second parameter was given.
  57. IF ( @columnname IS NOT NULL )
  58. BEGIN
  59. -- Check if it is a table
  60. IF ( SELECT COUNT(*)
  61. FROM sys.objects
  62. WHERE object_id = @objid
  63. AND type IN ( 'S ', 'U ', 'TF' )
  64. ) = 0
  65. BEGIN
  66. RAISERROR(15218,-1,-1,@objname)
  67. RETURN(1)
  68. END
  69. -- check if it is a correct column name
  70. IF ( ( SELECT 'count' = COUNT(*)
  71. FROM sys.columns
  72. WHERE name = @columnname
  73. AND object_id = @objid
  74. ) = 0 )
  75. BEGIN
  76. RAISERROR(15645,-1,-1,@columnname)
  77. RETURN(1)
  78. END
  79. IF ( COLUMNPROPERTY(@objid, @columnname, 'IsComputed') = 0 )
  80. BEGIN
  81. RAISERROR(15646,-1,-1,@columnname)
  82. RETURN(1)
  83. END
  84. DECLARE ms_crs_syscom CURSOR LOCAL
  85. FOR SELECT text FROM syscomments WHERE id = @objid AND encrypted = 0 AND number =
  86. (SELECT column_id FROM sys.columns WHERE name = @columnname AND object_id = @objid)
  87. ORDER BY number,colid
  88. FOR READ ONLY
  89. END
  90. ELSE
  91. IF @objid < 0 -- Handle system-objects
  92. BEGIN
  93. -- Check count of rows with text data
  94. IF ( SELECT COUNT(*)
  95. FROM master.sys.syscomments
  96. WHERE id = @objid
  97. AND text IS NOT NULL
  98. ) = 0
  99. BEGIN
  100. RAISERROR(15197,-1,-1,@objname)
  101. RETURN (1)
  102. END
  103. DECLARE ms_crs_syscom CURSOR LOCAL FOR SELECT text FROM master.sys.syscomments WHERE id = @objid
  104. ORDER BY number, colid FOR READ ONLY
  105. END
  106. ELSE
  107. BEGIN
  108. /*
  109. ** Find out how many lines of text are coming back,
  110. ** and return if there are none.
  111. */
  112. IF ( SELECT COUNT(*)
  113. FROM syscomments c ,
  114. sysobjects o
  115. WHERE o.xtype NOT IN ( 'S', 'U' )
  116. AND o.id = c.id
  117. AND o.id = @objid
  118. ) = 0
  119. BEGIN
  120. RAISERROR(15197,-1,-1,@objname)
  121. RETURN (1)
  122. END
  123. IF ( SELECT COUNT(*)
  124. FROM syscomments
  125. WHERE id = @objid
  126. AND encrypted = 0
  127. ) = 0
  128. BEGIN
  129. RAISERROR(15471,-1,-1,@objname)
  130. RETURN (0)
  131. END
  132. DECLARE ms_crs_syscom CURSOR LOCAL
  133. FOR SELECT text FROM syscomments WHERE id = @objid AND encrypted = 0
  134. ORDER BY number, colid
  135. FOR READ ONLY
  136. END
  137. /*
  138. ** else get the text.
  139. */
  140. SELECT @LFCR = 2
  141. SELECT @LineId = 1
  142. OPEN ms_crs_syscom
  143. FETCH NEXT FROM ms_crs_syscom INTO @SyscomText
  144. WHILE @@fetch_status >= 0
  145. BEGIN
  146. SELECT @BasePos = 1
  147. SELECT @CurrentPos = 1
  148. SELECT @TextLength = LEN(@SyscomText)
  149. WHILE @CurrentPos != 0
  150. BEGIN
  151. --Looking for end of line followed by carriage return
  152. SELECT @CurrentPos = CHARINDEX(CHAR(13) + CHAR(10),
  153. @SyscomText, @BasePos)
  154. --If carriage return found
  155. IF @CurrentPos != 0
  156. BEGIN
  157. /*If new value for @Lines length will be > then the
  158. **set length then insert current contents of @line
  159. **and proceed.
  160. */
  161. WHILE ( ISNULL(LEN(@Line), 0) + @BlankSpaceAdded
  162. + @CurrentPos - @BasePos + @LFCR ) > @DefinedLength
  163. BEGIN
  164. SELECT @AddOnLen = @DefinedLength
  165. - ( ISNULL(LEN(@Line), 0)
  166. + @BlankSpaceAdded )
  167. INSERT #CommentText
  168. VALUES ( @LineId,
  169. ISNULL(@Line, N'')
  170. + ISNULL(SUBSTRING(@SyscomText,
  171. @BasePos,
  172. @AddOnLen), N'') )
  173. SELECT @Line = NULL ,
  174. @LineId = @LineId + 1 ,
  175. @BasePos = @BasePos + @AddOnLen ,
  176. @BlankSpaceAdded = 0
  177. END
  178. SELECT @Line = ISNULL(@Line, N'')
  179. + ISNULL(SUBSTRING(@SyscomText, @BasePos,
  180. @CurrentPos - @BasePos
  181. + @LFCR), N'')
  182. SELECT @BasePos = @CurrentPos + 2
  183. INSERT #CommentText
  184. VALUES ( @LineId, @Line )
  185. SELECT @LineId = @LineId + 1
  186. SELECT @Line = NULL
  187. END
  188. ELSE
  189. --else carriage return not found
  190. BEGIN
  191. IF @BasePos <= @TextLength
  192. BEGIN
  193. /*If new value for @Lines length will be > then the
  194. **defined length
  195. */
  196. WHILE ( ISNULL(LEN(@Line), 0)
  197. + @BlankSpaceAdded + @TextLength
  198. - @BasePos + 1 ) > @DefinedLength
  199. BEGIN
  200. SELECT @AddOnLen = @DefinedLength
  201. - ( ISNULL(LEN(@Line), 0)
  202. + @BlankSpaceAdded )
  203. INSERT #CommentText
  204. VALUES ( @LineId,
  205. ISNULL(@Line, N'')
  206. + ISNULL(SUBSTRING(@SyscomText,
  207. @BasePos,
  208. @AddOnLen), N'') )
  209. SELECT @Line = NULL ,
  210. @LineId = @LineId + 1 ,
  211. @BasePos = @BasePos
  212. + @AddOnLen ,
  213. @BlankSpaceAdded = 0
  214. END
  215. SELECT @Line = ISNULL(@Line, N'')
  216. + ISNULL(SUBSTRING(@SyscomText,
  217. @BasePos,
  218. @TextLength
  219. - @BasePos + 1),
  220. N'')
  221. IF LEN(@Line) < @DefinedLength
  222. AND CHARINDEX(' ', @SyscomText,
  223. @TextLength + 1) > 0
  224. BEGIN
  225. SELECT @Line = @Line + ' ' ,
  226. @BlankSpaceAdded = 1
  227. END
  228. END
  229. END
  230. END
  231. FETCH NEXT FROM ms_crs_syscom INTO @SyscomText
  232. END
  233. IF @Line IS NOT NULL
  234. INSERT #CommentText
  235. VALUES ( @LineId, @Line )
  236. DECLARE @printLine NVARCHAR(2550)
  237. DECLARE PostCur CURSOR FOR
  238. SELECT Text FROM #CommentText ORDER BY LineId
  239. OPEN PostCur
  240. FETCH NEXT FROM PostCur INTO @printLine
  241. WHILE @@fetch_status = 0
  242. BEGIN
  243. PRINT @printLine
  244. FETCH NEXT FROM PostCur INTO @printLine
  245. END
  246. CLOSE PostCur
  247. DEALLOCATE PostCur
  248. CLOSE ms_crs_syscom
  249. DEALLOCATE ms_crs_syscom
  250. DROP TABLE #CommentText
  251. RETURN (0) -- sp_PrintProc
  1. --存储过程查询
  2. declare @StrSql varchar(max)
  3. set @StrSql=(
  4. Select 'exec('+char(39)+'sp_PrintProc '+name+char(39)+');' as [data()] From sys.objects where Type='P' and name like 'softManage_%' for xml path('')
  5. )
  6. exec(@StrSql)

人气教程排行