Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 将作用域标识插入存储过程的第二个表中_.net_Sql Server - Fatal编程技术网

.net 将作用域标识插入存储过程的第二个表中

.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

我正在用一个存储过程将记录插入两个不同的表中。我需要获取第一个表的作用域标识,并将其插入TableId下的第二个表中。我在下面所做的不是为@Identity工作。有什么想法吗

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