0

こんにちは、これは私が書いた最初のカーソルプログラムです。

このプロシージャを使用して実行したいプロシージャのテーブルの行に正常に影響を与えた後、エラーが発生したことに驚いています。

メニューを投稿に割り当てています。特定の投稿からメニューを削除する場合、この投稿に属するすべての従業員のメニューを更新(追加/削除)する必要があります。この以下の手順はすべてのことを行いますが、エラーが発生します:

エラー:データベースには「EmployeeMenuMst」という名前のオブジェクトがすでに存在します。

実行後。

ストアドプロシージャは次のとおりです。

ALTER PROCEDURE [sUpdateEmpMenuMst]
    (@EmployeePostID INT)
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @EMPID INT
    DECLARE @EMPMENUID INT

    BEGIN TRAN
    BEGIN TRY
    DECLARE EmployeeTable CURSOR FOR

    SELECT EmployeeID FROM EMPLOYEEMST WHERE EmployeePostID=@EmployeePostID

    OPEN EmployeeTable

    FETCH NEXT FROM EmployeeTable INTO @EMPID
    WHILE @@FETCH_STATUS = 0
    BEGIN
    DELETE FROM EmployeeMenuMst WHERE EmployeeID=@EMPID  

    FETCH NEXT FROM EmployeeTable INTO @EMPID
    END
    CLOSE EmployeeTable
    DEALLOCATE EmployeeTable

        SELECT   EmployeeMst.EmployeeID, EmployeePostMenuMst.MenuID, EmployeePostMenuMst.AccessLevelID,1 AS ISVISIBLE
        INTO EmployeeMenuMst
        FROM     EmployeePostMenuMst 
        INNER JOIN EmployeeMst 
        ON EmployeePostMenuMst.EmployeePostID = EmployeeMst.EmployeePostID
        WHERE EmployeeMst.EMPLOYEEPOSTID=@EmployeePostID ORDER BY EmployeeMst.EMPLOYEEID
        COMMIT TRAN
    END TRY

    BEGIN CATCH
        ROLLBACK TRAN
        IF @@TRANCOUNT > 0
        DECLARE @ErrMsg nvarchar(4000), @ErrSeverity INT
        SELECT @ErrMsg = ERROR_MESSAGE(),
        @ErrSeverity = ERROR_SEVERITY()
        RAISERROR(@ErrMsg, @ErrSeverity, 1)

    END CATCH

   END
GO

コードビハインドaspx.csファイル:

private void UpdateMenus()
    {
        SqlCommand cmd = new SqlCommand();
        SqlConnection con = new SqlConnection(conStr);
        try
        {
            con.Open();
            cmd.CommandText = "sUpdateEmpMenuMst";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@EmployeePostID", Convert.ToInt32(Session["postID"]));
            cmd.Connection = con;
            int i = cmd.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            con.Close();
        }
        finally
        {
            con.Close();
        }
    }

エラーはExecuteNonQueryオンラインです。なぜそれはエラーをスローするのですか?

そして、エラーを取得した後、行は必要な方法で正常に影響を受けます!

感謝します!

4

1 に答える 1

2
SELECT   EmployeeMst.EmployeeID, EmployeePostMenuMst.MenuID, EmployeePostMenuMst.AccessLevelID,1 AS ISVISIBLE
        INTO EmployeeMenuMst

テーブルEmployeeMenuMstansfill istを作成しようとします。おそらく、検索している

Insert into EmployeeMenuMst
SELECT   EmployeeMst.EmployeeID, EmployeePostMenuMst.MenuID, EmployeePostMenuMst.AccessLevelID,1 AS ISVISIBLE
于 2012-12-19T11:49:35.367 に答える