Я опубликовал другие вопросы, относящиеся к этой проблеме, но у меня не было ответов, чтобы напрямую решить проблему импорта данных из нескольких строк из XLS.Я нечастый пользователь SQL или БД в целом, поэтому мой опыт / знания ограничен в написании этих запросов.Если есть более простой или более прямой подход к достижению моей цели, я, безусловно, открыт для них.Я не имею в виду перепост или что-то еще, но этот сайт, кажется, наиболее полезен (спасибо всем, кто ответил на мой другой пост).
Из некоторых постов, на которые я смотрел, я понимаю, что яиметь рабочий набор / запрос на основе набора (так как несколько строк импортируются).В конечном счете мне нужно только импортировать данные в родительскую таблицу, и дочерняя таблица может быть заполнена статическими значениями и / или значениями из родительской таблицы, но необходимо поддерживать связь PK / FK.И это то, с чем у меня больше всего проблем, когда из XLS импортируется более 1 строки данных.
Я настроил триггер для вставки значений в дочернюю таблицу, когда вставка выполняется вродительская таблица.Запрос выполняется правильно, однако я не могу заставить FK соответствовать PK, когда вставлено несколько строк данных.FK всегда имеет идентификатор последней строки, вставленной в родительскую таблицу.Я пробовал несколько подходов из других сообщений форума (здесь и на других сайтах), но всегда получаю ошибки.
Вот мой код триггера updatePgVer:
ALTER TRIGGER [updatePgVer]
ON [prototype].[dbo].[PageVersion]
FOR INSERT AS
BEGIN
SET NOCOUNT ON;
-- Insert into PageHistory
INSERT
INTO [prototype].[dbo].[PageHistory] ([VersionID], [Date], [Action], [Who], [StateId], [Owner])
SELECT
@@IDENTITY
, GETDATE()
, 'created'
, 'xls_user'
, [StateID]
, 'xls_user'
FROM inserted
END
И запрос, используемый для вставки вродительская таблица:
INSERT INTO [prototype].[dbo].[PageVersion] ([Number], [PageId], [Properties], [StateId], [Language], [SearchText], [PageMetaDescription], [PageMetaKeyWords], [PageTypeId], [Name], [Title], [Owner], [Admin], [ShowInMenu])
SELECT [Number], [PageId], [Properties], [StateId], [Language], [SearchText], [PageMetaDescription], [PageMetaKeyWords], [PageTypeId], [Name], [Title], [Owner], [Admin], [ShowInMenu]
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=C:\test_import.xls', 'SELECT * FROM [Query$]');
Единственная другая идея, которую я имею, заключается в том, чтобы создать какой-то цикл, который проходит через каждую строку и импортирует по 1 за раз, так что @@ IDENTITY всегда будет совпадать.Однако примеры, на которые я смотрел, кажутся трудно применимыми к моему импорту.