2011-08-15 4 views
0

このストアドプロシージャを書きますが、すべてのSQLクエリをサイトコードに戻していますが、このクエリを変換するのに少し問題があります。 1つのテーブルにデータを挿入し、最初のテーブルで生成されたキーを持つ別のテーブルに挿入します。私はサイトコードからこれを書くための最良の方法は何か分かりません。 3つの方法や何を作る?このストアドプロシージャを単純なクエリに変換する方法

@m_UserId uniqueidentifier, 
@m_WispTypeId int, 
@m_CreatedOnDate datetime, 
@m_PrivacyTypeId int, 
@m_WispText nvarchar(200) 
AS 

SET XACT_ABORT, NOCOUNT ON 

DECLARE @starttrancount int 

BEGIN TRY 
    SELECT @starttrancount = @@TRANCOUNT 

    IF @starttrancount = 0 
     BEGIN TRANSACTION 

     DECLARE @wispId int 

     INSERT INTO dbo.tbl_Wisps 
     (UserId,WispTypeId,CreatedOnDate,PrivacyTypeId,WispText) 
     VALUES 
     (@m_UserId,@m_WispTypeId,@m_CreatedOnDate,@m_PrivacyTypeId,@m_WispText) 

     SELECT @wispId = SCOPE_IDENTITY() 

     INSERT INTO dbo.tbl_CommentableEntity 
     (ItemId) 
     VALUES 
     (@wispId) 

     DECLARE @ceid int 

     select @ceid = SCOPE_IDENTITY() 

     UPDATE dbo.tbl_Wisps SET CommentableEntityId = @ceid WHERE WispId = @wispId 

    IF @starttrancount = 0 
     COMMIT TRANSACTION 
END TRY 
BEGIN CATCH 
    IF XACT_STATE() <> 0 AND @starttrancount = 0 
     ROLLBACK TRANSACTION 
    RAISERROR ('Error in adding new wisp', 16, 1) 
END CATCH 

答えて

3

OUTPUT句を使用するにはいくつかの方法があります。次のパターンが役に立ちます:

0

コードで実行したい場合は、いくつかの方法に分割して、保存メソッドでIDを返すようにします。次に、3つのクエリをすべて含むメソッドを作成するだけで、ストアドプロシージャ内の同じロジックをコードでエミュレートできます。

public int SaveThis() 
{ 
    return -1 //return identity 
} 

public int SaveThat(int thisID) 
{ 
    return -2 //return identity 
} 

public void SaveThisAndThat() 
{ 
    int thisID = this.SaveThis(); 
    int thatID = this.SaveThat(thisID); 

    //so on and so forth  
} 
関連する問題