未完成,感觉有点问题。
==================================声明==================================
本文原创,转载在正文中显要的注明作者和出处,并保证文章的完整性。
未经作者同意请勿修改(包括本声明),保留法律追究的权利。
未经作者同意请勿用于出版、印刷或学术引用。
本文不定期修正完善,为保证内容正确,建议移步原文处阅读。
本文链接:http://www.cnblogs.com/wlsandwho/p/4374367.html
=======================================================================
虽然早在上学时就学过Sql Server 2005,但是工作中一直没有亲手用过。
最近的工程抛弃了Access,用上了Sql Server 2008。
于是需要写存储过程了。
(不知道为什么他们那么喜欢Access,是部署方便,工业大多只存数据的原因?)
=======================================================================
看了几天(虚词)的资料,只能写出这种程度,还是希望能有大神指点下。
=======================================================================
在数据库中建立了一张表,用于存放上次未处理的数据。当软件启动的时候,读取数据到界面,然后清空表。
之前我在VC++中用ADO分成2步做:在事务中,读取表数据,删除表数据。
没有问题。但感觉好麻烦。
想看看能不能用存储过程直接实现,于是看了下手册:
OUT | OUTPUT 指示参数是输出参数。使用 OUTPUT 参数将值返回给过程的调用方。除非是 CLR 过程,否则 text、ntext 和 image 参数不能用作 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 DECLARE @tblSD TBLDATA 5 6 BEGIN TRANSACTION 7 INSERT INTO @tblSD 8 ( Cmd , 9 Num , 10 Name , 11 InnerID , 12 Result , 13 EndTime , 14 Legal 15 ) 16 SELECT Cmd , 17 Num , 18 Name , 19 InnerID , 20 Result , 21 EndTime , 22 Legal 23 FROM Data 24 25 DELETE FROM Data 26 COMMIT TRANSACTION 27 28 SELECT * 29 FROM @tblSD 30 END
不要忘了授权
1 GRANT EXECUTE ON usp_GetData TO testdev
=======================================================================
试了下,功能是实现了,感觉效率会坑,好在数据很少。
没办法,以后再说吧。
(已消毒,所以命名规范什么的,处女座请自重。)