程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> SQL中print、sp_helptext的限制與擴大

SQL中print、sp_helptext的限制與擴大

編輯:MSSQL

SQL中print、sp_helptext的限制與擴大。本站提示廣大學習愛好者:(SQL中print、sp_helptext的限制與擴大)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL中print、sp_helptext的限制與擴大正文


在SQL中,應用靜態SQL是很罕見的。有些龐雜的盤算,或是存儲進程,代碼很長,中央能夠有屢次履行SQL語句。而調試拼串的SQL語句倒是件苦楚的事,很好看出來運轉的語句是甚麼。所以我會常常應用print這個敕令把運轉前的語句打印到屏幕上,然後復制出離開另外一個窗口停止調試、修正,如許就比擬便利了。然則這個print敕令有一些限制,在單字節符集下,最年夜只能打印打印8000個字符的長度,而在雙字節字符集是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,可以查詢存儲進程,函數等代碼,應用起來也比擬便利,但也有長度的限制,並且打印出來的格局跟源代碼的格局有些對應不上。寫了一個自界說存儲進程來取代,代碼以下:

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

顯示規矩、默許值、未加密的存儲進程、用戶界說函數、觸發器或視圖的文本。

語法

sp_helptext [ @objname = ] 'name'

參數

[@objname =] 'name'

對象的稱號,將顯示該對象的界說信息。對象必需在以後數據庫中。name 的數據類型為 nvarchar(776),沒有默許值。

前往代碼值

0(勝利)或 1(掉敗)

正文

sp_helptext 在多個行中顯示用來創立對象的文本,個中每行有 Transact-SQL 界說的 255 個字符。這些界說只駐留在以後數據庫的 syscomments 表的文本中。

權限

履行權限默許授與 public 腳色。

示例

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

USE pubs
EXEC sp_helptext 'employee_insupd'

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved