2016-04-26 6 views
5

グリッドビューにバインドされたいくつかの列を含むテーブルがあります。SQL Server 2008の単一ストアドプロシージャで2つの更新クエリを書き込む方法

グリッドビューでは、列を更新する編集オプションがあります。その状況で私は2つの更新ストアドプロシージャを書く必要があるすべての列を選択することを意味するAudiotoName、別の列を選択するすべての列は1つの更新クエリを発生させるために更新されますが私はその列を選択する編集AudiotoName列2番目の更新ストアドプロシージャが呼び出されます。私はしようとしたが、それは正常に働いていない誰も私を助けます。

マイコード:

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 

誰も私を助けることはできますか?

答えて

2

クエリの問題は、@AuditoNameがtrueであっても、下位の更新クエリが実行されていることです。これにより、テーブルSubjectItemsが再更新されます。代わりにブロックif...elseを使用してください。

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

ありがとう –

関連する問題