我已经发布了与此问题相关的其他问题,但没有任何回应直接解决从 XLS 导入多行数据的问题。我一般不经常使用 SQL 或 DB,所以我的背景/经验在编写这些查询方面是有限的。如果有更简单或更直接的方法可以实现我的目标,我当然愿意接受。我不是想过度张贴或任何东西,但这个网站似乎是最有帮助的(感谢所有回复我其他帖子的人)。
从我看过的一些帖子中,我了解到我有一个基于工作集的查询/触发器(因为确实导入了多行)。最终我只需要将数据导入到父表中,子表可以填充静态值和/或父表中的值,但需要维护PK/FK关系。当从 XLS 导入超过 1 行数据时,这似乎是我遇到的最大问题。
我已经设置了一个触发器,当在父表上执行插入时,将值插入到子表中。查询正确执行,但是当插入多行数据时,我无法让 FK 与 PK 匹配。FK 始终具有插入到父表中的最后一行的 ID。我从其他论坛帖子(这里和其他网站)尝试了几种方法,但总是出错。
这是我的 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 始终匹配。但是,我看过的示例似乎很难应用于我的导入。