2016-04-26 16 views
5

Ho una tabella che contiene alcune colonne associate a una griglia.Come scrivere due query di aggiornamento in una singola stored procedure in SQL Server 2008

In tale schermata, ho un'opzione di modifica per aggiornare le colonne. In tale situazione ho bisogno di scrivere due stored procedure di aggiornamento che significa selezionare tutte le colonne AudiotoName, selezionare un'altra colonna tutte le colonne sono aggiornate per generare una query di aggiornamento ma quando seleziono la tabella in cui è presente la colonna AudiotoName che modifica solo per selezionare quella colonna solleverà la seconda stored procedure di aggiornamento. Ho provato ma non funziona correttamente nessuno può aiutarmi.

Il mio codice:

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 

Qualcuno può darmi una mano?

risposta

2

Il problema nella query è che, anche se @AuditoName è true, la query di aggiornamento inferiore è in esecuzione. Ciò aggiornerà nuovamente la tabella SubjectItems. Puoi utilizzare il blocco if...else, come di seguito:

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

grazie mille –

Problemi correlati