2011-03-16 65 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