使用SQL2008数据库,如何在insert的同时返回标识?
后台数据库是SQLSERVER 2008,表的一个字段是标识,想知道如何在使用insert插入行的同时返回自动生成的id?具体在ASP.NET中该如何写呢?谢谢!
[解决办法]
在sqlserver中加select identity,获取编号。
[解决办法]
insert into tbldemo values('测试')
select @@identity
[解决办法]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([ID] int identity(1,1),[列] varchar(1),[内容] int)
insert [tb] select 'A',100
select @@IDENTITY as 返回值
[解决办法]
select @@identity获得自动生成 id
net中,添加一个返回int类型的方法,把这个自动生成的id返回
[解决办法]
数据访问层代码:
/// <summary>
///
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
public int SaveUserProfile(UserProfile user) {
SqlParameter[] p = new SqlParameter[] {
SqlHelper.MakeInParameter(AT + FILED_USER_PROFILE_ID, SqlDbType.Int, 4, user.UserProfileId),
SqlHelper.MakeInParameter(AT + FILED_MEMBER_ID, SqlDbType.NVarChar, 50, user.MemberId),
SqlHelper.MakeInParameter(AT + FILED_EMAIL, SqlDbType.VarChar, 128, user.Email),
SqlHelper.MakeInParameter(AT + FIELD_CREATED_DATE, SqlDbType.DateTime, 8, user.CreatedDate == DateTime.MinValue ? DateTime.Now : user.CreatedDate),
SqlHelper.MakeInParameter(AT + FIELD_CREATED_BY, SqlDbType.NVarChar, 50, user.CreatedBy),
SqlHelper.MakeInParameter(AT + FIELD_MODIFIED_DATE, SqlDbType.DateTime, 8, user.ModifiedDate == DateTime.MinValue ? DateTime.Now : user.ModifiedDate),
SqlHelper.MakeInParameter(AT + FIELD_MODIFIED_BY, SqlDbType.VarChar, 50, user.ModifiedBy),
SqlHelper.MakeParameter(AT + FIELD_RETURN_VALUE, SqlDbType.Int, 4, ParameterDirection.Output, 0)
};
SqlHelper.ExecuteNonQuery(sqlConnectionString, CommandType.StoredProcedure, PROC_SAVE_USER_PROFILE, p);
return Convert.ToInt32(p[p.Length - 1].Value);
}
对应的存储过程:
ALTER PROCEDURE [dbo].[USP_Create_UserProfile]
@UserProfileId int
,@MemberId nvarchar(50)
,@Email varchar(128)
,@CreatedDate datetime
,@CreatedBy nvarchar(50)
,@ModifiedDate datetime
,@ModifiedBy nvarchar(50)
,@ReturnValue INT OUTPUT
AS
BEGIN
SET @ReturnValue = @UserProfileId
IF NOT EXISTS(SELECT 1 FROM UserProfiles t WHERE t.UserProfileId = @UserProfileId)
BEGIN
INSERT INTO [dbo].[UserProfiles]
([MemberId]
,[Email]
,[CreatedDate]
,[CreatedBy]
,[ModifiedDate]
,[ModifiedBy])
VALUES
(@MemberId
,@CreatedDate
,@CreatedBy
,@ModifiedDate
,@ModifiedBy)
SET @ReturnValue = SCOPE_IDENTITY();
END
ELSE
BEGIN
UPDATE [dbo].[UserProfiles]
SET [MemberId] = @MemberId
,[Email] = @Email
,[CreatedDate] = @CreatedDate
,[CreatedBy] = @CreatedBy
,[ModifiedDate] = @ModifiedDate
,[ModifiedBy] = @ModifiedBy
WHERE UserProfileId = @UserProfileId
END
END