2016-04-26 25 views
5

'da tek saklı yordamda iki güncelleştirme sorgusunu nasıl yazabilirim? Bir tabloya bağlı birkaç sütun içeren bir tablom var.SQL Server 2008

Bu kılavuz görünümünde, sütunları güncellemek için bir düzenleme seçeneğim var. Bu durumda, tüm sütunları AudiotoName beklediğim anlamına gelen bir iki güncelleştirme saklı yordam yazmam gerekiyor, bir sütun, bir güncelleştirme sorgusu yükseltmek için tüm sütunlar güncelleştiriliyor, ancak bu sütunu seçmek için yalnızca düzenleyen AudiotoName sütununda tablo seçtiğimde ikinci güncelleme saklı yordamını yükseltecektir. Denedim ama düzgün çalışmayan biri bana yardım edebilir.

Kodum:

ALTER PROCEDURE up_file 
    (@ModuleID int, 
    @SubjectID int, 
    @Physician varchar(500) = '', 
    @AuditoName varchar(300) = '', 
    @AuditoType varchar(50) = '', 
    @AudioPath varchar(2000) = '', 
    @BaseDocumentName varchar(500) = '', 
    @BaseDocumentPath varchar(2000) = '', 
    @Createddate datetime, 
    @CreatedBy varchar(200) = '') 
AS 
BEGIN 
    IF @AuditoName = 'true' //select AuditoName column only raise this update query 
    BEGIN 
     UPDATE SubjectItems 
     SET ModuleID = @ModuleID, 
      SubjectID = @SubjectID, 
      Physician = '@Physician', 
      AuditoName = '@AuditoName', 
      AuditoType = '@AuditoType', 
      AudioPath ='@AudioPath', 
      BaseDocumentName = '@BaseDocumentName', 
      BaseDocumentPath = '@BaseDocumentPath' 
     WHERE AuditoName = @AuditoName 
    END 
    BEGIN //normal fields select raise this update query 
     UPDATE SubjectItems 
     SET ModuleID = @ModuleID, 
      SubjectID = @SubjectID, 
      Physician = '@Physician', 
      AuditoName = '@AuditoName', 
      AuditoType = '@AuditoType', 
      AudioPath ='@AudioPath', 
      BaseDocumentName = '@BaseDocumentName', 
      BaseDocumentPath = '@BaseDocumentPath' 
     WHERE ModuleID = @ModuleID 
    END 
END 

kimse bana yardım edebilir?

cevap

2

Sorgunuzdaki sorun şu ki, @AuditoName doğru olsa bile, daha düşük güncelleştirme sorgusu çalışıyor. Bu tablo SubjectItems'u yeniden güncelleyecektir. Aşağıdaki gibi, yerine if...else blok kullanabilirsiniz:

ALTER PROCEDURE up_file 
    (@ModuleID int, 
    @SubjectID int, 
    @Physician varchar(500) = '', 
    @AuditoName varchar(300) = '', 
    @AuditoType varchar(50) = '', 
    @AudioPath varchar(2000) = '', 
    @BaseDocumentName varchar(500) = '', 
    @BaseDocumentPath varchar(2000) = '', 
    @Createddate datetime, 
    @CreatedBy varchar(200) = '') 
AS 
BEGIN 
    IF @AuditoName = 'true' //select AuditoName column only raise this update query 
    BEGIN 
     UPDATE SubjectItems 
     SET ModuleID = @ModuleID, 
      SubjectID = @SubjectID, 
      Physician = '@Physician', 
      AuditoName = '@AuditoName', 
      AuditoType = '@AuditoType', 
      AudioPath ='@AudioPath', 
      BaseDocumentName = '@BaseDocumentName', 
      BaseDocumentPath = '@BaseDocumentPath' 
     WHERE AuditoName = @AuditoName 
    END 
ELSE 
    BEGIN //normal fields select raise this update query 
     UPDATE SubjectItems 
     SET ModuleID = @ModuleID, 
      SubjectID = @SubjectID, 
      Physician = '@Physician', 
      AuditoName = '@AuditoName', 
      AuditoType = '@AuditoType', 
      AudioPath ='@AudioPath', 
      BaseDocumentName = '@BaseDocumentName', 
      BaseDocumentPath = '@BaseDocumentPath' 
     WHERE ModuleID = @ModuleID 
    END 
END 
+0

çok teşekkür ederim –