2016-04-26 12 views
5

Tôi có một bảng có chứa một vài cột được liên kết với chế độ xem lưới.Làm thế nào tôi có thể viết hai truy vấn cập nhật trong thủ tục được lưu trữ duy nhất trong SQL Server 2008

Trong chế độ xem lưới đó, tôi có tùy chọn chỉnh sửa để cập nhật các cột. Trong tình huống đó, tôi cần phải viết hai thủ tục lưu trữ cập nhật có nghĩa là tôi chọn tất cả các cột mong đợi AudiotoName, chọn một cột khác tất cả các cột được cập nhật để tăng một truy vấn cập nhật nhưng khi tôi chọn bảng trong đó có cột AudiotoName chỉ chỉnh sửa để chọn cột đó nó sẽ nâng cao thủ tục lưu trữ thứ hai được cập nhật. Tôi đã thử nhưng nó không làm việc đúng cách bất cứ ai có thể giúp tôi ra ngoài.

Mã của tôi:

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 

bất cứ ai có thể giúp tôi không?

Trả lời

2

Vấn đề trong truy vấn của bạn là, ngay cả khi @AuditoName là đúng, truy vấn cập nhật thấp hơn đang chạy. Điều này sẽ cập nhật lại bảng SubjectItems. Bạn có thể sử dụng khối if...else để thay thế, như sau:

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

cảm ơn bạn rất nhiều –

Các vấn đề liên quan