2014-04-09 2 views
0

1 개의 저장된 proc을 사용하여 두 개의 다른 테이블에 레코드를 삽입합니다. 첫 번째 테이블의 범위 ID를 가져 와서 "TableId"아래의 두 번째 테이블에 삽입해야합니다. 아래에서 내가하는 일은 @Identity를 위해 일하는 것이 아닙니다. 어떤 아이디어?저장 프로 시저의 두 번째 테이블에 범위 ID 삽입

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 

영문 코드는 여기에 있습니다 :

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; 
+0

를? 오류가 있습니까? –

+0

.ashx 페이지에서 작업 중이며 ashx에 대한 오류 보고서를받는 방법을 모르므로 오류가 표시되지 않습니다. 하지만 수동으로 @ Table1Id = "1"과 같은 변수를 추가하기 때문에 "table1Id"필드로 좁혔습니다. – mlg74

+0

그렇다면 '작동하지 않는다'는 것은 무엇을 의미합니까? 예상되는 행동은 무엇이며 실제 행동은 무엇입니까? –

답변

0

당신이보고를 here

* "SCOPE_IDENTITY을 대신 SCOPE_IDENTITY()

시도의 IDENT_CURRENT를 사용하려고 했습니까() 것이다 현재 세션에서 생성 된 마지막 ID 값 반환 "*

+0

당신이 링크 된 기사가 scope_identity를 사용한다고 말했습니다. – mlg74

+0

잘 모르겠지만 SCOPE_IDENTITY()가 특정 테이블이 아닌 세션과 관련된 마지막 ID를 취하는 것처럼 보입니다. 나는 이런 식으로하는 것이 더 낫다고 짐작했다. SET @Identity = SELECT IDENT_CURRENT ('캠프 비디오') 으로 설정하고 일반 varialble로 사용하십시오. – MilitelloVinx

+0

Ident_current ('Table1')을 시도했지만 여전히 작동하지 않았습니다. – mlg74

0

쿼리의 Table1 테이블에 Identity 열이없는 것처럼 보입니다. SCOPE_IDENTITY()를 사용하여 최신 삽입 된 ID를 가져 오려면 삽입하려는 테이블에 ID 열이 있어야합니다. SQL Server Management Studio의 Table1 스키마에서 ID 열이 있는지 확인하십시오.

다음은 샘플입니다. 희망이 도움이 :

을 양자 택일로, 당신은 여기에 SQL 바이올린이를 볼 수 있습니다 - 당신이 '작동하지'가 무엇을 의미 http://sqlfiddle.com/#!3/a9906/3

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