.net 将作用域标识插入存储过程的第二个表中
我正在用一个存储过程将记录插入两个不同的表中。我需要获取第一个表的作用域标识,并将其插入TableId下的第二个表中。我在下面所做的不是为@Identity工作。有什么想法吗.net 将作用域标识插入存储过程的第二个表中,.net,sql-server,.net,Sql Server,我正在用一个存储过程将记录插入两个不同的表中。我需要获取第一个表的作用域标识,并将其插入TableId下的第二个表中。我在下面所做的不是为@Identity工作。有什么想法吗 PROCEDURE [dbo].[campVideo] @DateCreated datetime, @CustomerId int, @VideoName varchar(100), @Identity int OUT, @UserID int, @DateTime da
PROCEDURE [dbo].[campVideo]
@DateCreated datetime,
@CustomerId int,
@VideoName varchar(100),
@Identity int OUT,
@UserID int,
@DateTime datetime
AS
BEGIN
Insert Into Table1 (DateCreated, CustomerId, VideoName)
Values (@DateCreated, @CustomerId, @VideoName)
SET @Identity = SCOPE_IDENTITY()
Insert Into Table2 (UserID, DateTime, Table1Id)
Values (@UserID, @DateTime, @Identity)
End
aspx代码如下:
string strConn = "mydatasource";
SqlConnection Conn = new SqlConnection(strConn);
SqlCommand Cmd = new SqlCommand("campVideo", Conn);
Cmd.CommandType = CommandType.StoredProcedure;
Cmd.Parameters.Add(new SqlParameter("@DateCreated", DateTime.Now.ToString()));
Cmd.Parameters.Add(new SqlParameter("@CustomerId", strId));
Cmd.Parameters.Add(new SqlParameter("@VideoName", flv_filename));
Cmd.Parameters.Add(new SqlParameter("@UserID", strId));
Cmd.Parameters.Add(new SqlParameter("@DateTime", DateTime.Now.ToString()));
SqlParameter ClientIDSource = Cmd.Parameters.Add("@Identity", SqlDbType.Int, 0, "Id");
ClientIDSource.Direction = ParameterDirection.Output;
您是否尝试使用当前标识而不是范围标识 试着看一看
*SCOPE_IDENTITY将返回在当前会话中创建的最后一个标识值*查询中的表Table1似乎没有标识列。 为了使用SCOPE_IDENTITY获取最新插入的ID,您需要在插入的表中有一个IDENTITY列。请参阅SQLServerManagementStudio中表1的架构,以验证是否存在标识列 这是样品。希望这有助于: 或者,您可以在这里的SQL FIDLE中查看此信息-
你说的“不工作”是什么意思?有错误吗?我没有收到错误,因为我在.ashx页面工作,不知道如何获取ashx的错误报告。但是我把它缩小到table1Id字段,因为我手动添加了一个变量,比如@table1Id=1,那么它就可以工作了那么“不工作”是什么意思呢?你期望的行为是什么,实际的行为是什么?你链接的文章说要使用scope_标识我不确定,但对我来说,scope_标识将采用与会话相关的最后一个标识,而不是特定的表。出于这个原因,我猜最好是设置@Identity=SELECT IDENT_CURRENT'campVideo'并将其用作普通变量。
create table #Table1 (Table1_ID int identity(1,1),DateCreated Datetime, CustomerId int, VideoName varchar(100))
create table #Table2 (UserID int, [DateTime] DateTime, Table1Id int)
DECLARE @DateCreated datetime
DECLARE @CustomerId int
DECLARE @VideoName varchar(100)
DECLARE @Identity int
DECLARE @UserID int
DECLARE @DateTime datetime
SET @DateCreated = '2014-04-10'
SET @CustomerId = 1
SET @VideoName = 'videoname'
SET @Identity = 0
SET @UserID = 2
SET @DateTime = '2014-04-10'
Insert Into Table1 (DateCreated, CustomerId, VideoName) Values (@DateCreated, @CustomerId, @VideoName)
SET @Identity = SCOPE_IDENTITY()
SELECT @Identity as Latest_Identity_Value
Insert Into Table2 (UserID, DateTime, Table1Id) Values (@UserID, @DateTime, @Identity)
select * from Table2