2013-05-01 20 views
0

我有一個表命名爲以下信息hr_Folders:包含由|分隔的列表的更新列使用SQL

FolderId FolderName EmployeeId NumberOfEntries IsDeleted 
1   Folder 1  9     1    0 
2   Folder 2  9     1    0 
3   Folder 3  9     1    0 

並且存在folderids保存爲另一個表hr_EmployeeSavedRegistrants |分隔列表如下:

ID EmployeeID RegistrantID FolderID  
44 9   4   1|2 
45 9   5   1|3  
46 9   6   2 

我想創建一個存儲過程,其中當我通過folderid和僱員,它會刪除該從hr_folder,然後相應地更新hr_EmployeeSavedRegistrants表的FolderId列文件夾(刪除folderid列列表中folderid如果有在hr_EmployeeSavedRegistrants一個folderid,然後刪除該行像hr_EmployeeSavedRegistrants第3行)

至今編寫的代碼是:

CREATE PROC GetResumeCountInfolder 

@Folder int 

AS 

DECLARE @FolderIDs VARCHAR(100) 
SELECT @FolderIDs = FolderID from hr_EmployeeSavedRegistrants 
where deleted = 0 
and EmployeeID= 9 

請建議如何做

感謝

+6

**方面不是:**請不要將多個值存儲在一列中,就像您一樣。用[** normailze **](https://en.wikipedia.org/wiki/Database_normalization)代替創建一個新表'EmployeesFolders'會更容易。 – 2013-05-01 12:43:39

+1

當您通過Employee/FolderId刪除文件夾時,是否實際刪除了該文件夾,還是將IsDeleted位設置爲1? – Aushin 2013-05-01 12:45:09

+0

是的,這是很好的建議,但我可以拆分該欄 – DotnetSparrow 2013-05-01 12:45:21

回答

0

這是給你的表結構的解決方案,但是,我會與馬哈茂德同意 - 你真的應該正常化你的表。使用EmployeeId和FolderId創建一個名爲hr_EmployeeFolders的新表作爲兩個字段。然後,您可以存儲1至n個員工和文件夾。這種方式更容易維護。

不過,鑑於當前的情況下,這樣的事情應該工作:

create proc updatefolder 
    @FolderId int, @EmployeeId int 
as 
begin 
    update hr_Folders 
    set isdeleted = 1 
    where folderId = @folderId and employeeId = @employeeId 

    update hr_EmployeeSavedRegistrants 
    set FolderId = replace(replace(folderId, @FolderId, ''),'||','|') 
    where employeeId = @employeeId 

    update hr_EmployeeSavedRegistrants 
    set FolderId = 
    case 
     when left(FolderId,1) = '|' then right(folderId, len(folderId) - 1) 
     when right(FolderId,1) = '|' then left(folderId, len(folderId) - 1) 
     else FolderId 
    end 
    where employeeId = @employeeId 
end 

SQL Fiddle Demo

還有一些其他的選擇拆分列表和再創造,但是這是我能想到的最快的。第一個更新語句更新文件夾表中的已刪除列。第二個更新語句從EmployeeSavedRegistrants表中刪除文件夾ID以及任何可能的雙管道實例。最終更新語句刪除任何開始或結尾的管道。

+0

@DotnetSparrow - 包含EmployeeId的編輯答案(沒有在您的帖子中看到)。 – sgeddes 2013-05-01 13:31:47

相關問題