最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SQL中print、sp_helptext的限制與擴(kuò)展

 更新時(shí)間:2016年02月02日 11:23:12   作者:FishParadise  
這篇文章主要介紹了print、sp_helptext的限制與擴(kuò)展 的相關(guān)資料,需要的朋友可以參考下

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

以下存儲(chǔ)過程可以打印完整的信息,不受長(zhǎng)度的限制。代碼如下:

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

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

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

當(dāng)然,查看源代碼有多種方法,可以在SSMS上操作等,看個(gè)人習(xí)慣或方便操作了。

詳解sp_helptext

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

語(yǔ)法

sp_helptext [ @objname = ] 'name'

參數(shù)

[@objname =] 'name'

對(duì)象的名稱,將顯示該對(duì)象的定義信息。對(duì)象必須在當(dāng)前數(shù)據(jù)庫(kù)中。name 的數(shù)據(jù)類型為 nvarchar(776),沒有默認(rèn)值。

返回代碼值

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

注釋

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

權(quán)限

執(zhí)行權(quán)限默認(rèn)授予 public 角色。

示例

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

USE pubs
EXEC sp_helptext 'employee_insupd'

相關(guān)文章

最新評(píng)論

工布江达县| 桓台县| 章丘市| 鞍山市| 海林市| 会理县| 吕梁市| 沙坪坝区| 株洲县| 山西省| 凤庆县| 肇州县| 高要市| 木兰县| 双桥区| 宜良县| 大埔县| 阳谷县| 松原市| 阿坝| 沙坪坝区| 望奎县| 新乡市| 恩平市| 达尔| 铜川市| 隆昌县| 大理市| 萨嘎县| 柞水县| 太仆寺旗| 阿勒泰市| 南投市| 孝感市| 南和县| 钦州市| 柯坪县| 漳州市| 永善县| 潞西市| 琼中|