我绊倒了这个,希望它很容易,我看错了。
我正在接收格式化的xls文件。有一个C#应用程序处理数据并将SQLBulkCopy插入到我的表中。有5对列,一列是Url Text描述,另一列是URL本身。这些URL将引用一个html或pdf文件,我将稍后将其引入第二个单独的表。
离开不相关的字段,我有一个表 [Base] 的字段:
[ID](身份)
[BaseID]
......一堆其他相关领域, 然后...
[LinkText1]
[LinkURL1]
[LinkText2]
[LinkURL2]
[LinkText3]
[LinkURL3]
[LinkText4]
[LinkURL4]
[LinkText5]
[LinkURL5]
网址/文件的存储位于 [Documents] 表格中,字段为:
[BaseIdentityID] - 引用[Base]表中的ID字段
[DocIndex] - 每个基本记录可以填充1到5个URL。 这是为了知道它是哪个URL#。[MimeType]
[Url]
[文字]
[内容]
[已处理] - 位 - 将拉取网址数据 以后,这标志着。
我在[Base]表上使用了INSTEAD OF触发器。这些记录可以更新,因此我们将存档的数据保存在表中。触发器查看我们要插入的内容,将现有版本标记为旧版本,并将此新Base记录插入为CurrentVersion。
在这个触发器中,我现在想要在[Documents]表中插入一个基于5对URL数据中的每一对的新行,传入[BaseIdentityID]中的[Base] ID标识字段。文档表,LinkURL1的[DocIndex]为1,LinkURL2的[DocIndex]为2等......
很难想象我将如何做到这一点。有什么建议?我试图避免使用游标,因为我可以插入相当大的Base记录集合。
感谢。
答案 0 :(得分:0)
也许你可以在AFTER INSERT触发器中编写这种查询:
INSERT INTO [InternationalDR].[dbo].[Documents] ([BaseIdentityID], [DocIndex], [Url], [Text])
SELECT INSERTED.[ID], 1, INSERTED.[LinkURL1], INSERTED.[LinkText1] FROM INSERTED
UNION ALL SELECT INSERTED.[ID], 2, INSERTED.[LinkURL2], INSERTED.[LinkText2] FROM INSERTED
UNION ALL SELECT INSERTED.[ID], 3, INSERTED.[LinkURL3], INSERTED.[LinkText3] FROM INSERTED
UNION ALL SELECT INSERTED.[ID], 4, INSERTED.[LinkURL4], INSERTED.[LinkText4] FROM INSERTED
UNION ALL SELECT INSERTED.[ID], 5, INSERTED.[LinkURL5], INSERTED.[LinkText5] FROM INSERTED;