2016-04-08 21 views
0

belli alanları güncellemek için izin ve benkullanıcılar sadece bu mağaza prosedür var

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

Ne soruyorsun ne de cevap olarak ne bekliyorsun. Herhangi bir spesifik sorun için lütfen [Minimal, Tam ve Doğrulanabilir Örnek] (http://stackoverflow.com/help/mcve) ekleyin. Lütfen [İyi Soru Nasıl Soruyorum?] 'U okuyun (http://stackoverflow.com/help/how-to-ask). Sorularınızın spesifik olduğundan ve aşırı geniş olmadığından emin olun. – Igor

cevap

1

ise yani güncelleme bölümündeki eklemek gerektiğini, kullanıcı değil hepsi bazı alanları güncelleştirmek istediğiniz varsayalım nasıl boş araçlar sadece

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

yazabilirsiniz güncelleme yoksa veya başka bir özel değer ve bir harf ifadesini almak

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

veya küçük harf ifadesinde kullanılmak üzere her sütun için ekstra boole parametreleri vermek

+0

Cevabınızı takdir ediyorum, başka bir şekilde de anladım, ayrıca bir göz atabilirsiniz. Bu bir sebepten dolayı benim için çalışmadı. – MohdO

+0

sizin fikrinizi bana verdi, çok teşekkürler – MohdO

1

çok daha iyi çözümler vardır eminim, ama hızlı ve kolay bir çözüm çok çirkin dinamik SQL kullanmak olabilir

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

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

EXECUTE SP_EXECUTESQL @QueryText 
+0

Cevabınızı takdir ediyorum, ben de başka bir şekilde anladım, ayrıca bir göz atabilirsiniz. Bu bir sebepten dolayı benim için çalışmadı. – MohdO

0

GÜNCELLEME helpChain

SET

fullName = ISNULL (@ fullName, fullName),

lineShift = ISNULL (@ LineShift, lineShift),

dizisi = ISNULL (@ sekansı, sekans),

Role = ISNULL (@ Rolü, Rol),

radioChannel = ISNULL (,) radioChannel, radioChannel @

officePhone = ISNULL (@ officePhone, officePhone),

cep telefonu = ISNULL (@ Cep telefonu, cep telefonu) LineID = @lineId