【问题标题】:How can I write two update queries in single stored procedure in SQL Server 2008如何在 SQL Server 2008 的单个存储过程中编写两个更新查询
【发布时间】:2016-04-26 14:06:52
【问题描述】:

我有一个表,其中包含绑定到 gridview 的几列。

在那个网格视图中,我有一个编辑选项来更新列。在那种情况下,我需要编写两个更新存储过程,这意味着我选择所有列期望AudiotoName,选择另一列所有列都更新以引发一个更新查询,但是当我选择具有AudiotoName 列的表时只编辑要选择该列,它将引发第二个更新存储过程。我试过了,但它不能正常工作,谁能帮帮我。

我的代码:

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

谁能帮帮我?

【问题讨论】:

    标签: asp.net sql-server-2008


    【解决方案1】:

    您的查询中的问题是,即使@AuditoName 为真,较低的更新查询仍在运行。这将重新更新表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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-19
      • 2014-01-07
      • 1970-01-01
      相关资源
      最近更新 更多