久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

SQL中print、sp

146次閱讀
沒有評論

共計 2087 個字符,預計需要花費 6 分鐘才能閱讀完成。

本篇文章給大家分享的是有關 SQL 中 print、sp_helptext 的限制與擴展是怎樣的,丸趣 TV 小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著丸趣 TV 小編一起來看看吧。

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

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

IF OBJECT_ID(N sp_print_all) IS NOT NULLBEGINDROP PROCEDURE sp_print_allENDGOCREATE PROCEDURE sp_print_all (@dynamic_sql NVARCHAR(MAX))ASDECLARE @start INTDECLARE @len INTSET @start = 1SET @len = 4000WHILE (@start   LEN(@dynamic_sql))BEGINPRINT SUBSTRING(@dynamic_sql, @start, @len)SET @start = @start + @lenENDPRINT SUBSTRING(@dynamic_sql, @start, @len)GO

code-1

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

IF OBJECT_ID(N sp_helptext_user) IS NOT NULLBEGINDROP PROCEDURE sp_helptext_userENDGOCREATE PROCEDURE sp_helptext_user(@obj_name NVARCHAR(200) =  )ASSET NOCOUNT ON;DECLARE @text NVARCHAR(MAX),@i INT,@text2 NVARCHAR(MAX),@db_name SYSNAME,@obj_id BIGINTSET @db_name = PARSENAME(@obj_name ,3)IF @db_name IS NULLSET @db_name = DB_NAME()ELSE IF @db_name   DB_NAME()BEGINRAISERROR(15250 ,-1 ,-1)RETURN (1)ENDSET @obj_id = OBJECT_ID(@obj_name)IF @obj_id IS NULLBEGINRAISERROR(15009 ,-1 ,-1 ,@obj_name ,@db_name)RETURN (1)ENDSELECT @text = [definition]FROM sys.all_sql_modulesWHERE [object_id] = @obj_idWHILE LEN(@text)   2000BEGINSET @i = CHARINDEX(CHAR(13) ,@text ,2000) SET @text2 = LEFT(@text ,@i)SET @text = SUBSTRING(@text ,@i + 2 ,LEN(@text)) PRINT @text2ENDPRINT @textSET NOCOUNT OFF;GO

code-2

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

詳解 sp_helptext

顯示規則、默認值、未加密的存儲過程、用戶定義函數、觸發器或視圖的文本。

語法

sp_helptext [@objname =] name

參數

[@objname =] name

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

返回代碼值

0(成功)或 1(失敗)

注釋

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

權限

執行權限默認授予 public 角色。

示例

下面的示例顯示 employee_insupd 觸發器的文本,該觸發器在數據庫 pubs 中。

USE pubsEXEC sp_helptext  employee_insupd

以上就是 SQL 中 print、sp_helptext 的限制與擴展是怎樣的,丸趣 TV 小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-17發表,共計2087字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 新巴尔虎左旗| 南召县| 双桥区| 桂阳县| 依兰县| 高青县| 淄博市| 砀山县| 同江市| 清涧县| 马关县| 池州市| 交城县| 子洲县| 永吉县| 色达县| 淮北市| 通江县| 北宁市| 普宁市| 伊通| 南陵县| 当阳市| 大竹县| 红桥区| 肇源县| 邛崃市| 华坪县| 凯里市| 柳州市| 罗甸县| 商水县| 上蔡县| 蛟河市| 集安市| 筠连县| 江源县| 南投市| 平乐县| 和平区| 龙州县|