|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
------解决方案--------------------^_^