濮阳杆衣贸易有限公司

主頁 > 知識庫 > SQL中print、sp_helptext的限制與擴展

SQL中print、sp_helptext的限制與擴展

熱門標簽:南通智能外呼系統(tǒng)怎么樣 樂昌電話機器人 地圖標注可以編輯地名嗎 濮陽清豐400開頭的電話申請 地圖標注跑線下市場 真3地圖標注 疫情時期電話機器人 南京怎么申請400這種電話 臺灣外呼系統(tǒng)軟件

在SQL中,使用動態(tài)SQL是很常見的。有些復雜的計算,或是存儲過程,代碼很長,中間可能有多次執(zhí)行SQL語句。而調試拼串的SQL語句卻是件痛苦的事,很難看出來運行的語句是什么。所以我會經常使用print這個命令把運行前的語句打印到屏幕上,然后復制出來到另一個窗口進行調試、修改,這樣就比較方便了。但是這個print命令有一些限制,在單字節(jié)符集下,最大只能打印打印8000個字符的長度,而在雙字節(jié)字符集是4000個。

以下存儲過程可以打印完整的信息,不受長度的限制。代碼如下:

IF OBJECT_ID(N'sp_print_all') IS NOT NULL
BEGIN
DROP PROCEDURE sp_print_all
END
GO
CREATE PROCEDURE sp_print_all (@dynamic_sql NVARCHAR(MAX))
AS
DECLARE @start INT
DECLARE @len INT
SET @start = 1
SET @len = 4000
WHILE (@start  LEN(@dynamic_sql))
BEGIN
PRINT SUBSTRING(@dynamic_sql, @start, @len)
SET @start = @start + @len
END
PRINT SUBSTRING(@dynamic_sql, @start, @len)
GO 

code-1

還有一個存儲sp_helptext,可以查詢存儲過程,函數(shù)等代碼,使用起來也比較方便,但也有長度的限制,而且打印出來的格式跟源代碼的格式有些對應不上。寫了一個自定義存儲過程來代替,代碼如下:

IF OBJECT_ID(N'sp_helptext_user') IS NOT NULL
BEGIN
DROP PROCEDURE sp_helptext_user
END
GO
CREATE PROCEDURE sp_helptext_user(@obj_name NVARCHAR(200) = '')
AS
SET NOCOUNT ON;
DECLARE @text NVARCHAR(MAX)
,@i INT
,@text2 NVARCHAR(MAX)
,@db_name SYSNAME
,@obj_id BIGINT
SET @db_name = PARSENAME(@obj_name ,3)
IF @db_name IS NULL
SET @db_name = DB_NAME()
ELSE 
IF @db_name > DB_NAME()
BEGIN
RAISERROR(15250 ,-1 ,-1)
RETURN (1)
END
SET @obj_id = OBJECT_ID(@obj_name)
IF @obj_id IS NULL
BEGIN
RAISERROR(15009 ,-1 ,-1 ,@obj_name ,@db_name)
RETURN (1)
END
SELECT @text = [definition]
FROM sys.all_sql_modules
WHERE [object_id] = @obj_id
WHILE LEN(@text) > 2000
BEGIN
SET @i = CHARINDEX(CHAR(13) ,@text ,2000) 
SET @text2 = LEFT(@text ,@i)
SET @text = SUBSTRING(@text ,@i + 2 ,LEN(@text)) 
PRINT @text2
END
PRINT @text
SET NOCOUNT OFF;
GO 

code-2

當然,查看源代碼有多種方法,可以在SSMS上操作等,看個人習慣或方便操作了。

詳解sp_helptext

顯示規(guī)則、默認值、未加密的存儲過程、用戶定義函數(shù)、觸發(fā)器或視圖的文本。

語法

sp_helptext [ @objname = ] 'name'

參數(shù)

[@objname =] 'name'

對象的名稱,將顯示該對象的定義信息。對象必須在當前數(shù)據庫中。name 的數(shù)據類型為 nvarchar(776),沒有默認值。

返回代碼值

0(成功)或 1(失?。?/p>

注釋

sp_helptext 在多個行中顯示用來創(chuàng)建對象的文本,其中每行有 Transact-SQL 定義的 255 個字符。這些定義只駐留在當前數(shù)據庫的 syscomments 表的文本中。

權限

執(zhí)行權限默認授予 public 角色。

示例

下面的示例顯示 employee_insupd 觸發(fā)器的文本,該觸發(fā)器在數(shù)據庫 pubs 中。

USE pubs
EXEC sp_helptext 'employee_insupd'

標簽:河北 福建 南京 通遼 阿里 廣安 馬鞍山 陜西

巨人網絡通訊聲明:本文標題《SQL中print、sp_helptext的限制與擴展》,本文關鍵詞  SQL,中,print,helptext,的,限制,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《SQL中print、sp_helptext的限制與擴展》相關的同類信息!
  • 本頁收集關于SQL中print、sp_helptext的限制與擴展的相關信息資訊供網民參考!
  • 推薦文章
    云龙县| 宜丰县| 双峰县| 怀安县| 安远县| 万载县| 宝山区| 潜山县| 云阳县| 靖边县| 阿坝县| 新蔡县| 武邑县| 伊川县| 潼关县| 保定市| 遵义县| 论坛| 定结县| 铅山县| 新密市| 新津县| 麻江县| 普定县| 安岳县| 修文县| 林州市| 临邑县| 金门县| 安溪县| 靖州| 墨脱县| 安仁县| 奉节县| 桦川县| 罗城| 长兴县| 比如县| 扬州市| 盐源县| 西贡区|