2016-06-22 3 views
0

임 저장 프로 시저를 만들었습니다. UserCategoryCodeUserCategoryName, 기존 레코드를 확인하고 싶습니다. existing record을 만들지 만 정확하게 수행하지 않으려면 UserCategoryCode, 어떻게해야합니까? 메신저저장 프로 시저가 유효하지 않음

SP 작동합니다 (UserCategoryName에 대한 작업을) 그렇게하려고 노력하지만,하지

ALTER PROCEDURE [dbo].[UserCategories_InsertUpdate] 
@UserCategoryId int, 
@UserCategoryCode varchar(50), 
@UserCategoryName varchar(250), 
@Remarks nvarchar(max), 
@StatusId int, 
-- @StatusChangeDate DATETIME, 
@CreateId int, 
@Mode varchar(50), 
@iOutput int output 

AS 
BEGIN 

    BEGIN TRY 
    BEGIN TRAN 


    IF @Mode = 'Add' 
    BEGIN 
    IF NOT EXISTS (SELECT UserCategoryCode,UserCategoryName FROM UserCategories WHERE UserCategoryCode = @UserCategoryCode AND UserCategoryName = @UserCategoryName) 
     BEGIN 

      INSERT INTO UserCategories(

       UserCategoryCode, 
       UserCategoryName, 
       StatusId, 
       StatusChangeDate, 
       CreateBy, 
       CreatedDate, 
       Remarks 

       ) 
       VALUES(
       @UserCategoryCode, 
       @UserCategoryName, 
       @StatusId,GETDATE(), 
       @CreateId,GETDATE(), 
       @Remarks 


       ) 



     SET @iOutput = 1 --save successful-- 
     END 

     ELSE 

     BEGIN 
      SET @iOutput=-3 --existing record-- 
     END 
    END 
    ELSE IF @Mode = 'Modify' 
    BEGIN 

         UPDATE UserCategories 

         SET UserCategoryCode = @UserCategoryCode, 
          UserCategoryName = @UserCategoryName, 
          StatusId = @StatusId, 
          Remarks = @Remarks, 
          EditBy = @CreateId, 
          EditDate = GETDATE() 


         WHERE UserCategoryId = @UserCategoryId 

         SET @iOutput = 2 --save successful-- 

    END 

    COMMIT 

    END TRY 

    BEGIN CATCH 
     print ERROR_MESSAGE() 
     SET @iOutput = -2 --sp error-- 
     ROLLBACK   
    END CATCH 

END 
+0

사용 된 dbms에 태그를 지정하십시오. (이 코드는 ANSI SQL과 전혀 다르게 보입니다 ...) – jarlh

+0

선생님, 조언을 주셔서 감사 드리며 명확하지 않습니다. 설명해 주시겠습니까? SQL 초심자, 배우고 싶습니다. advice :)'(표준, 다른 버전의 SQL 언어가 있습니다. 그러나 ANSI 표준을 따르려면 모두 주요 명령을 지원해야합니다.) ' – Codeone

+0

SQL은 ANSI/ISO에서 지정한 언어입니다. 대부분의 dbms 제품에는 해당 표준에 가까운 SQL 구현이 있습니다. 그러나 저장 프로 시저의 경우 대부분의 제품에는 자체 버전이 있습니다. 귀하의 코드는 ANSI SQL과 호환되지 않습니다. 사용중인 dbms에 태그를 달면 질문에 더 많은주의를 기울이고 더 나은 답변을 얻을 수 있습니다 - 더 빨리! – jarlh

답변

1

오 마침내 작업, 내가 볼 수있는 솔루션

IF NOT EXISTS (SELECT UserCategoryCode FROM UserCategories WHERE UserCategoryCode = @UserCategoryCode) IF NOT EXISTS (SELECT UserCategoryName FROM UserCategories WHERE UserCategoryName = @UserCategoryName)

BEGIN 

      INSERT INTO UserCategories(

       UserCategoryCode, 
       UserCategoryName, 
       StatusId, 
       StatusChangeDate, 
       CreateBy, 
       CreatedDate, 
       Remarks 

       ) 
       VALUES(
       @UserCategoryCode, 
       @UserCategoryName, 
       @StatusId,GETDATE(), 
       @CreateId,GETDATE(), 
       @Remarks 


       ) 



     SET @iOutput = 1 --save successful-- 
     END 

     ELSE 

     BEGIN 
      SET @iOutput=-3 --existing record-- 
     END 
     ELSE 

     BEGIN 
      SET @iOutput=-5 --existing record-- 
     END 

    END 
    ELSE IF @Mode = 'Modify' 
    BEGIN 

         UPDATE UserCategories 

         SET UserCategoryCode = @UserCategoryCode, 
          UserCategoryName = @UserCategoryName, 
          StatusId = @StatusId, 
          Remarks = @Remarks, 
          EditBy = @CreateId, 
          EditDate = GETDATE() 


         WHERE UserCategoryId = @UserCategoryId 

         SET @iOutput = 2 --save successful-- 

    END 

    COMMIT 

    END TRY 

    BEGIN CATCH 
     print ERROR_MESSAGE() 
     SET @iOutput = -2 --sp error-- 
     ROLLBACK   
    END CATCH 

END 

및 코드

else if (output == -3) 
       { 
        lblMsg.Text = "Already Exists!"; 
        lblMsg.ForeColor = System.Drawing.Color.Orange; 
       } 

       else if (output == -5) 
       { 
        lblMsg.Text = "Already Exists!"; 
        lblMsg.ForeColor = System.Drawing.Color.Orange; 
       } 
관련 문제