SQL Server 2008 R2——T-SQL 存儲過程 返回表


==================================聲明==================================

本文原創,轉載在正文中顯要的注明作者和出處,並保證文章的完整性。

未經作者同意請勿修改(包括本聲明),保留法律追究的權利。

未經作者同意請勿用於出版、印刷或學術引用。

本文不定期修正完善,為保證內容正確,建議移步原文處閱讀。

本文鏈接:http://www.cnblogs.com/wlsandwho/p/4374367.html

=======================================================================

雖然早在上學時就學過Sql Server 2005,但是工作中一直沒有親手用過。

最近的工程拋棄了Access,用上了Sql Server 2008。

於是需要寫存儲過程了。

 (不知道為什么他們那么喜歡Access,是部署方便,工業大多只存數據的原因?)

=======================================================================

看了幾天(虛詞)的資料,只能寫出這種程度,還是希望能有大神指點下。

=======================================================================

在數據庫中建立了一張表,用於存放上次未處理的數據。當軟件啟動的時候,讀取數據到界面,然后清空表。

之前我在VC++中用ADO分成2步做:在事務中,讀取表數據,刪除表數據。

沒有問題。但感覺好麻煩。

想看看能不能用存儲過程直接實現,於是看了下手冊:

OUT | OUTPUT
指示參數是輸出參數。使用 OUTPUT 參數將值返回給過程的調用方。除非是 CLR 過程,否則 textntextimage 參數不能用作 OUTPUT 參數。OUTPUT 參數可以為游標占位符,CLR 過程除外。
不能將表值數據類型指定為過程的 OUTPUT 參數。

看來只能曲線救國了。

=========================第一次寫這種東西,又要丟人了==============================

創建一個用戶定義表類型

 1 CREATE TYPE TBLDATA AS TABLE
 2 (
 3 [Cmd] [nvarchar](50),
 4 [Num] [nvarchar](50),
 5 [Name] [nvarchar](50) ,
 6 [InnerID] [nvarchar](50),
 7 [Result] [nvarchar](50),
 8 [EndTime] [datetime],
 9 [Legal] [tinyint]
10 )
11 
12 GO

創建一個存儲過程

 1 CREATE PROC usp_GetData
 2 AS 
 3     BEGIN
 4         SET NOCOUNT ON
 5         
 6         DECLARE    @tblSD TBLDATA
 7         
 8         BEGIN TRANSACTION
 9             INSERT    INTO @tblSD
10                     ( Cmd ,
11                       Num ,
12                       Name ,
13                       InnerID ,
14                       Result ,
15                       EndTime ,
16                       Legal    
17                     )
18                     SELECT  Cmd ,
19                             Num ,
20                             Name ,
21                             InnerID ,
22                             Result ,
23                             EndTime ,
24                             Legal
25                     FROM    Data
26 
27             DELETE    FROM Data
28         COMMIT TRANSACTION
29         
30         SET NOCOUNT OFF
31         
32         SELECT  Cmd ,
33                 Num ,
34                 Name ,
35                 InnerID ,
36                 Result ,
37                 EndTime ,
38                 Legal
39         FROM    @tblSD
40     END

不要忘了授權

(我的testdev只有讀、寫權限)

1 GRANT EXECUTE ON usp_GetData TO testdev

=======================================================================

試了下,功能是實現了,感覺效率會坑,好在數據很少。

沒辦法,以后再說吧。

 (已消毒,所以命名規范什么的,處女座請!自!重!)

=======================================================================

想來,我的這個存儲過程會返回好多結果,所以有必要先屏蔽行影響。

在命令行里試驗過,還要在代碼里能用才行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM