2016-06-22 4 views
0

Im erstellen Sie die gespeicherte Prozedur, ich möchte überprüfen, UserCategoryCode und UserCategoryName, bestehenden Datensatz, ich mache eine existing record, aber nicht richtig funktioniert es für die UserCategoryCode, Wie kann ich es tun? im versuchen, es zu tun, aber nicht arbeiten, (Seine Arbeit für die UserCategoryName)gespeicherte Prozedur existiert Details nicht validieren

SP

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

Markieren Sie die verwendeten DBMS. (Dieser Code sieht überhaupt nicht wie ANSI SQL aus ...) – jarlh

+0

Sir, danke für den Rat und ich bin nicht klar, können Sie es bitte erklären, ich bin ein Anfänger für die SQL, ich mag es zu lernen, und ich akzeptierte Ihre Beratung :) meintest du '(Standard gibt es verschiedene Versionen der SQL-Sprache. Um jedoch mit dem ANSI-Standard zu entsprechen, unterstützen sie alle mindestens die Hauptbefehle)' – Codeone

+0

SQL ist eine durch ANSI/ISO spezifizierte Sprache. Die meisten dbms-Produkte verfügen über eine SQL-Implementierung, die diesem Standard nahe kommt. Wenn es jedoch um gespeicherte Prozeduren geht, haben die meisten Produkte ihre eigenen Versionen. Ihr Code ist nicht ANSI SQL-konform. Wenn Sie die von Ihnen verwendeten dbms markieren, erhalten Ihre Fragen bessere Aufmerksamkeit und bessere Antworten - schneller! – jarlh

Antwort

1

oh endlich seine Arbeits, fand ich die Lösung,

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 

und Code hinter

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; 
       }