我有三個表:更新關聯表
- 角色
- 權限
- RolePermission
我有一個更新的存儲過程role
如果我通過g權限與更新存儲過程的角色相關聯,我可以使用函數[dbo.Split][1]
將它們分割好。
但之後我該如何更新角色權限表?
我需要循環嗎?如果是這樣的話:怎麼樣?
我有三個表:更新關聯表
我有一個更新的存儲過程role
如果我通過g權限與更新存儲過程的角色相關聯,我可以使用函數[dbo.Split][1]
將它們分割好。
但之後我該如何更新角色權限表?
我需要循環嗎?如果是這樣的話:怎麼樣?
UPDATE [ROLE] SET
[email protected],
[Name][email protected]
WHERE [email protected]
DELETE FROM RolePermission WHERE [email protected]
INSERT INTO RolePermission
SELECT @RoleId, P.Items
FROM dbo.Split(@PermisionIds, ',') P
你可以這樣做(有關數據的缺乏詳細信息 - 這樣的猜測在次)一種可能的方式是:
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
什麼是您的CSV文件是什麼樣子?你的桌子的結構是什麼?你的更新存儲過程是什麼?爲什麼沒有存儲proc更新其他表呢! – 2011-03-16 10:04:23
COMA分離的字符串「1,2,4,6」 – 2011-03-16 10:20:35
是的 - 但這些值是什麼意思**?你在同一個文件中有'RoleID'和'PermissionID'嗎? **並且請在任何時候停止向所有人發送!**解鎖您的CAPS LOCK KEY .... – 2011-03-16 10:23:07