2016-04-08 19 views
0

ich diesen Speicher Verfahren haben zu aktualisieren und ich vermuten lässt der Benutzer einige Felder nicht alle davon aktualisieren wollen, was soll ich auf dem Update-Abschnitt hinzufügenWie Benutzern erlauben, nur bestimmte Felder

CREATE PROCEDURE [dbo].[helpChainAllCRUD] 
    @action char(1), 
    @lineId char(2), 
    @lineShift smallint = NULL, 
    @sequence smallint = NULL, 
    @Role VARCHAR(32) = NULL, 
    @radioChannel VARCHAR(16)= NULL, 
    @officePhone VARCHAR(16)= NULL, 
    @cellPhone VARCHAR(16)= NULL 
as 

IF(@action = 'I') 
    BEGIN TRY 
     BEGIN TRAN 
      INSERT INTO [dbo].[tbl_helpChain] (lineId,lineShift,sequence,Role,radioChannel,officePhone,cellPhone) 
      VALUES (@lineId ,@lineShift,@sequence,@Role,@radioChannel,@officePhone,@cellPhone) 
     COMMIT 
    END TRY 
    BEGIN CATCH 
     IF @@TRANCOUNT >0 
      ROLLBACK 
    END CATCH 

IF(@action = 'U') 
    BEGIN TRY 
     BEGIN TRAN 
      UPDATE [dbo].[tbl_helpChain] SET [email protected],[email protected],[email protected],[email protected],[email protected],[email protected] WHERE [email protected] 
      COMMIT 
     END TRY 
    BEGIN CATCH 
     IF @@TRANCOUNT >0 
      ROLLBACK 
    END CATCH 

IF(@action = 'D') 
    BEGIN TRY 
     BEGIN TRAN 
     Delete from [dbo].[tbl_helpChain] WHERE [email protected] 
     COMMIT 
    END TRY 
    BEGIN CATCH 
     IF @@TRANCOUNT >0 
      ROLLBACK 
    END CATCH 

IF(@action = 'S') 
    Begin 
     select lineId,lineShift,sequence,Role,radioChannel,officePhone,cellPhone from [dbo].[tbl_helpChain] 
    end 

GO 
+1

Es ist überhaupt nicht klar, was Sie fragen oder was Sie als Antwort erwarten. Wenn Sie ein bestimmtes Problem haben, fügen Sie bitte ein [Minimales, vollständiges und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve) bei. Bitte lesen Sie auch [Wie stelle ich eine gute Frage] (http://stackoverflow.com/help/how-to-ask). Stellen Sie sicher, dass Ihre Fragen spezifisch und nicht zu weit gefasst sind. – Igor

Antwort

1

Wenn also null Mittel nicht aktualisieren Sie einfach

schreiben konnte
SET lineShift = COALESCE(@lineShift,lineShift), ... 

oder nehmen Sie noch einen besonderen Wert und einen Fall Ausdruck

SET lineShift = CASE WHEN @lineShift = -1 then lineShift else @lineShift end, 

oder Sie geben zusätzliche boolean Parameter für jede Spalte für die Verwendung in dem Fall Ausdruck

+0

Ich schätze Ihre Antwort, ich habe es auch auf andere Weise herausgefunden, Sie können es sich auch ansehen. Dieser hat aus irgendeinem Grund für mich nicht geklappt. – MohdO

+0

Ihr gab mir die Idee, vielen Dank – MohdO

1

Ich bin sicher, es gibt viel bessere Lösungen gibt, aber eine schnelle und einfache Lösung könnte sehr hässlich dynamische SQL

DECLARE @QueryText nvarchar(max) = 'UPDATE [dbo].[tbl_helpChain] SET ' 

IF @radioChannel<> NULL 
@QueryText = @QueryText + '[email protected]' 

EXECUTE SP_EXECUTESQL @QueryText 
zu benutzen,
+0

Ich schätze Ihre Antwort, ich habe es auch auf andere Weise herausgefunden, Sie können es sich auch anschauen. Dieser hat aus irgendeinem Grund für mich nicht geklappt. – MohdO

0

UPDATE helpChain

SET

fullname = ISNULL (@ fullname, fullname),

lineShift = ISNULL (@ LineShift, lineShift),

sequence = ISNULL (@ Sequenz, Sequenz),

Role = ISNULL (@ Rolle, Rolle),

radioChannel = ISNULL (@ radioChannel, radioChannel),

Office = ISNULL (@ Office, Office),

MOBILTELEFON = ISNULL (@ Mobiltelefon, Mobiltelefon) WHERE LineID = @lineId

Verwandte Themen