我有三个表:更新关联表
- 角色
- 权限
- 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