日期:2014-05-20  浏览次数:20454 次

|M| 我的一个存储过程,如何返回值啊要怎么写 谢谢
SQL存储过程:
CREATE   PROCEDURE   [insert_Table11_1]
(@name_1   [nvarchar](50))

AS   INSERT   INTO   [HotelBook].[dbo].[Table11]  
  (   [name])  
 
VALUES  
(   @name_1)
GO
这里是插入表表有字段   id,name
现在是添加记录的name然后我要返回id如何更改上面的存储过程???
ASP.net执行:
SqlConnection   conn=new   SqlConnection(“connectionString”);
SqlCommand   com   =   new   SqlCommand();
com.Connection=conn;
com.CommandText= "insert_Table11_1 "
com.CommandType   =   CommandType.StoredProcedure;
??然后下面是怎么写的我是返回addid=添加返回的值

------解决方案--------------------
SELECT @@IDENTITY AS 'Identity '

------解决方案--------------------
CREATE PROCEDURE [insert_Table11_1]
(@name_1 [nvarchar](50))

AS INSERT INTO [HotelBook].[dbo].[Table11]
( [name])

VALUES
( @name_1)

SELECT @@IDENTITY AS 'Identity '

GO
------解决方案--------------------
@@IDENTITY
返回最后插入的标识值。


------解决方案--------------------
@@IDENTITY
是全局的

一般情况下不会有问题

如果用了触发器就不能用咯
------解决方案--------------------
确切的说,如果你写了一个触发器,并且在触发器里做了insert操作,那@@IDENTITY会得到错误结果的
------解决方案--------------------
CREATE PROCEDURE [insert_Table11_1]
(
@name_1 [nvarchar](50),
@OutID int output
)

AS
INSERT INTO [HotelBook].[dbo].[Table11]
( [name])
VALUES
( @name_1)

SET @OutID = (SELECT scope_identity() )
GO

//程序中
你的参数列表只增加一个参数

par[4] = new SqlParameter( "@UutID ", SqlDbType.Int, 4);
pas[4].Direction = ParameterDirection.Output;

//执行存储过程后

int outID = Convert.ToInt32(pas[4].value);

------解决方案--------------------
par[4] = new SqlParameter( "@UutID ", SqlDbType.Int, 4);
应该是par[4] = new SqlParameter( "@OutID ", SqlDbType.Int, 4);
:)字误!
------解决方案--------------------
楼上正解

PS:如果你用DataReader的话 最好是关了DR以后再去读返回参数的值
------解决方案--------------------
scope_identity()

和@@IDENTITY作用类似

所不同的是它的作用范围是局部

而@@IDENTITY返回的是数据库任何表的新记录ID

------解决方案--------------------
http://www.5d.cn/Tutorial/webdevelop/.net/200412/1960.html
------解决方案--------------------
^_^