2011-03-16 82 views
0

我有三個表:更新關聯表

  • 角色
  • 權限
  • RolePermission
(只有角色ID和permissionid鏈接表)

我有一個更新的存儲過程role

如果我通過g權限與更新存儲過程的角色相關聯,我可以使用函數[dbo.Split][1]將它們分割好。

但之後我該如何更新角色權限表?

我需要循環嗎?如果是這樣的話:怎麼樣?

+0

什麼是您的CSV文件是什麼樣子?你的桌子的結構是什麼?你的更新存儲過程是什麼?爲什麼沒有存儲proc更新其他表呢! – 2011-03-16 10:04:23

+0

COMA分離的字符串「1,2,4,6」 – 2011-03-16 10:20:35

+0

是的 - 但這些值是什麼意思**?你在同一個文件中有'RoleID'和'PermissionID'嗎? **並且請在任何時候停止向所有人發送!**解鎖您的CAPS LOCK KEY .... – 2011-03-16 10:23:07

回答

1

你可以這樣做(有關數據的缺乏詳細信息 - 這樣的猜測在次)一種可能的方式是:

  • BULK INSERT您的CSV文件導入到一個臨時表,讓您同時擁有角色ID的和許可ID可用(猜測你有兩個CSV)

  • 然後使用一個事務和幾個T-SQL語句將數據放入適當的位置。

第1步:BULK INSERT

您需要使用BULK INSERT,讓您的數據到臨時表:

CREATE TABLE #BulkImportTemp (RoleID INT, PermissionID INT) 

BULK INSERT #BulkImportTemp 
FROM 'c:\yourcsvfile.csv' 
WITH 
    (FIELDTERMINATOR = ',', 
    ROWTERMINATOR = '\n') 
GO 

SELECT * FROM #BulkImportTemp 

第2步:更新必要的表

現在,一旦您將所有數據存儲在臨時表中,您可以更新必要的表:

START TRANSACTION 

UPDATE dbo.Role 
SET ....... 
FROM #BulkImportTemp tmp 
WHERE ........ 

UPDATE dbo.Permission 
SET ....... 
FROM #BulkImportTemp tmp 
WHERE ........ 

INSERT INTO dbo.RolePermission(....) 
    SELECT ........ 
    FROM #BulkImportTemp tmp 
    WHERE ........ 

COMMIT