[每日小知識]_解决SQL Server里sp_helptext输出格式错行问题

中国风
博客专家认证
2008-08-04 12:53:18
加精
在开发环境中常遇到更改存储过程、函数、视图等对象,解决SQL Server2005里sp_helptext输出格式错行问题。
use Master  
go
if object_id('SP_SQL') is not null
drop proc SP_SQL
go
/******************************************************************************************************************************************************

整理人:中国风(Roy)

日期:2008.01.01
******************************************************************************************************************************************************/
create proc [dbo].[SP_SQL](@ObjectName sysname)
as
set nocount on ;
declare @Print varchar(max)
if exists(select 1 from syscomments where ID=object_id(@ObjectName) and encrypted=1)
begin
Print N'對象已加密!'
return
end

if coalesce(object_id(@ObjectName,N'P'),object_id(@ObjectName,N'FN'),object_id(@ObjectName,N'IF'),object_id(@ObjectName,N'TF'),object_id(@ObjectName,N'TR'),object_id(@ObjectName,N'V')) is null
begin
Print N'對象只針對函數、存儲過程、觸發器、視圖!'
return
end
print 'Use '+db_Name()
print 'Go'
print 'if object_ID('+quotename(case when charindex(']',@ObjectName)=0 then '['+replace(rtrim(@ObjectName),'.','].[')+']' else @ObjectName end ,'''')+') is not null'
print char(9)+'Drop '+case when object_id(@ObjectName,N'P') is not null then 'Procedure ' when Coalesce(object_id(@ObjectName,N'FN'),object_id(@ObjectName,N'IF'),object_id(@ObjectName,N'TF')) is not null then 'Function ' when object_id(@ObjectName,N'TR') is not null then 'Trigger ' else 'View 'end +case when charindex(']',@ObjectName)=0 then '['+replace(rtrim(@ObjectName),'.','].[')+']' else @ObjectName end
Print 'Go'

declare @T table(Col nvarchar(max))
insert @T select object_definition(object_id(@ObjectName)) +char(13)+char(10)
while (select max(Col) from @T)>''
begin
select top 1 @Print=left(Col,charindex(char(13)+char(10),Col)-1) from @T
print @Print
update @T set Col=stuff(Col,1,charindex(char(13)+char(10),Col)+1,'')
end
print 'Go'


go


調用方法:
use test--指定所屬數據庫
exec sp_sql 'sp_sql'--指定對象

原貼:
http://blog.csdn.net/roy_88/archive/2008/07/21/2686514.aspx
...全文
1987 85 打赏 收藏 转发到动态 举报
写回复
用AI写文章
85 条回复
切换为时间正序
请发表友善的回复…
发表回复
初薰 2012-05-22
  • 打赏
  • 举报
回复
我使用sqlserver2008执行的,没发现错行
大力水手 2011-06-29
  • 打赏
  • 举报
回复
学习..
Tanhualin 2010-04-25
  • 打赏
  • 举报
回复
引用 21 楼 dvd_01 的回复:
做记号,漂移而过
o(∩_∩)o...



学习
紫寒尺 2009-08-27
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 dvd_01 的回复:]
做记号,漂移而过
o(∩_∩)o...
[/Quote]

学习
zc_0101 2009-08-11
  • 打赏
  • 举报
回复
已阅:2009-8-11
zc_0101 2009-08-11
  • 打赏
  • 举报
回复
use Master  
go
if object_id('SP_SQL') is not null
drop proc SP_SQL
go
/******************************************************************************************************************************************************

整理人:中国风(Roy)

日期:2008.01.01
******************************************************************************************************************************************************/
create proc [dbo].[SP_SQL](@ObjectName sysname)
as
set nocount on ;
declare @Print varchar(max)
if exists(select 1 from syscomments where ID=object_id(@ObjectName) and encrypted=1)
begin
Print N'對象已加密!'
return
end

if coalesce(object_id(@ObjectName,N'P'),object_id(@ObjectName,N'FN'),object_id(@ObjectName,N'IF'),object_id(@ObjectName,N'TF'),object_id(@ObjectName,N'TR'),object_id(@ObjectName,N'V')) is null
begin
Print N'對象只針對函數、存儲過程、觸發器、視圖!'
return
end
print 'Use '+db_Name()
print 'Go'
print 'if object_ID('+quotename(case when charindex(']',@ObjectName)=0 then '['+replace(rtrim(@ObjectName),'.','].[')+']' else @ObjectName end ,'''')+') is not null'
print char(9)+'Drop '+case when object_id(@ObjectName,N'P') is not null then 'Procedure ' when Coalesce(object_id(@ObjectName,N'FN'),object_id(@ObjectName,N'IF'),object_id(@ObjectName,N'TF')) is not null then 'Function ' when object_id(@ObjectName,N'TR') is not null then 'Trigger ' else 'View 'end +case when charindex(']',@ObjectName)=0 then '['+replace(rtrim(@ObjectName),'.','].[')+']' else @ObjectName end
Print 'Go'

declare @T table(Col nvarchar(max))
insert @T select object_definition(object_id(@ObjectName)) +char(13)+char(10)
while (select max(Col) from @T)>''
begin
select top 1 @Print=left(Col,charindex(char(13)+char(10),Col)-1) from @T
print @Print
update @T set Col=stuff(Col,1,charindex(char(13)+char(10),Col)+1,'')
end
print 'Go'


go


調用方法:
use test--指定所屬數據庫
exec sp_sql 'sp_sql'--指定對象
lppchina 2008-08-24
  • 打赏
  • 举报
回复
路过
xiaolv_1017 2008-08-22
  • 打赏
  • 举报
回复
学习!
xiaocanhaha 2008-08-21
  • 打赏
  • 举报
回复
借鉴
greenery 2008-08-21
  • 打赏
  • 举报
回复
收藏
  • 打赏
  • 举报
回复
[Quote=引用 74 楼 greenery 的回复:]
收藏
[/Quote]
中国风 2008-08-20
  • 打赏
  • 举报
回复
[Quote=引用 70 楼 WNASP 的回复:]
真是麻烦,直接Ctrl+T  or  Ctrl+D不久可以了
[/Quote]

這不是轉換顯示結果集格式問題,是處理生成結果集。

在9樓已舉例子
WNASP 2008-08-20
  • 打赏
  • 举报
回复
真是麻烦,直接Ctrl+T or Ctrl+D不久可以了
ronaldinho010 2008-08-20
  • 打赏
  • 举报
回复
学习ing...
andyluohao 2008-08-19
  • 打赏
  • 举报
回复
小弟刚来,以前没用过2005,一直是2000的,看起来有点深奥,虚心请教
viva369 2008-08-19
  • 打赏
  • 举报
回复
学习
kelubel 2008-08-19
  • 打赏
  • 举报
回复
学习
dgm8 2008-08-19
  • 打赏
  • 举报
回复
学习
nnoovvee 2008-08-19
  • 打赏
  • 举报
回复
几号
huangjiant 2008-08-09
  • 打赏
  • 举报
回复
虚心学习~~~
加载更多回复(61)

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧