可是如果我們對該存儲過程加入[ ENCRYPTION ] 那麼你將無法看到任何結果
If Object_ID('yangyang8848.OneGoods') Is Not Null
Drop Proc yangyang8848.OneGoods
Go
Create Proc yangyang8848.OneGoods
@GoodsCode2 varchar(10) out,@GoodsCode varchar(10) = '0011'
With Encryption
As
Select * From Master_Goods Where GoodsCode = @GoodsCode
Set @GoodsCode2 = '0005'
Go
然後我們查詢 sys.sql_modules 目錄視圖,將返回給你Null。
然後我們執行以下SQL: Exec sp_helptext 'yangyang8848.OneGoods'
你將得到以下結果:The text for object 'yangyang8848.OneGoods' is encrypted.
說到這裡你應該明白了,參數[ ENCRYPTION ]:是一種加密的功能, 將 CREATE PROCEDURE 語句的原始文本轉換為模糊格式。模糊代碼的輸出在 SQL Server 2005 的任何目錄視圖中都不能直接顯示。對系統表或數據庫文件沒有訪問權限的用戶不能檢索模糊文本。但是,可通過 DAC 端口訪問系統表的特權用戶或直接訪問數據庫文件的特權用戶可使用此文本。此外,能夠向服務器進程附加調試器的用戶可在運行時從內存中檢索已解密的過程。
前兩天寫了一篇關於游標的介紹文章 ,下邊寫一個例子,將游標與存儲過程一起使用上:
If Object_ID('dbo.GetMasterGoods') Is Not Null
Drop Proc dbo.GetMasterGoods
Go
Create Proc GetMasterGoods
@MyCursor Cursor Varying Output
With Encryption
As
Set @MyCursor = Cursor
For
Select GoodsCode,GoodsName From Master_Goods
Open @MyCursor
Go
--下邊建立另外一個存儲過程,用於遍歷游標輸出結果
Create Proc GetAllGoodsIDAndName
As
Declare @GoodsCode varchar(18)
Declare @GoodsName nvarchar(20)
Declare @MasterGoodsCursor Cursor
Exec GetMasterGoods @MasterGoodsCursor out
Fetch Next From @MasterGoodsCursor
InTo @GoodsCode,@GoodsName
While(@@Fetch_Status = 0)
Begin
Begin
Print @GoodsCode + ':' + @GoodsName
End
Fetch Next From @MasterGoodsCursor
InTo @GoodsCode,@GoodsName
End
Close @MasterGoodsCursor
Deallocate @MasterGoodsCursor
Go
最後執行Exec GetAllGoodsIDAndName結果為以下內容
0003:品0003
0004:品0004
0005:123123
0006:品0006
0007:品0007
0008:品0008
0009:品0009
0010:品0010
0011:品0011
0012:品0012
0013:品0013
0014:品0014