Обновление связанной таблицы значениями, импортированными из файла, разделенного запятыми - PullRequest
0 голосов
/ 16 марта 2011

У меня есть три таблицы:

  • Роль
  • Разрешение
  • RolePermission (таблица ссылок с указанием только идентификатора роли и идентификатора полномочий)

У меня есть хранимая процедура, которая обновляет role

Если я передаю идентификаторы полномочий, связанные с ролью, в хранимую процедуру обновления, я могу использовать функцию [dbo.Split][1], чтобы разделить их правильно.

Но после этого как я могу обновить таблицу ролей разрешения?

Нужно ли зацикливаться? И если так: как?

Ответы [ 2 ]

1 голос
/ 16 марта 2011

Один из возможных способов сделать это (не имея подробной информации о ваших данных - так что время от времени угадывая) будет:

  • BULK INSERT ваш CSV-файл во временной таблице, поэтомуу вас есть как RoleID, так и Permission ID (предположим, что у вас есть оба в CSV)

  • , затем используйте транзакцию и несколько операторов T-SQL, чтобы поместить данные в нужные места.

Шаг 1: ОБЪЕМНАЯ ВСТАВКА

Вам потребуется использовать 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
0 голосов
/ 16 марта 2011
UPDATE [ROLE]   SET
 ProductId=@ProductId,
 [Name]=@Name
WHERE RoleId=@RoleId

DELETE FROM RolePermission  WHERE  RoleId=@RoleId
INSERT INTO RolePermission 
SELECT @RoleId, P.Items
FROM dbo.Split(@PermisionIds, ',') P
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...