将列字段作为新行拉入另一个表

时间:2012-12-13 19:09:14

标签: sql

我绊倒了这个,希望它很容易,我看错了。

我正在接收格式化的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记录集合。

感谢。

1 个答案:

答案 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;