0

我偶然发现了这个,希望它很容易,我看错了。

我正在接收格式化的 xls 文件。有一个 C# 应用程序来处理数据并将 SQLBulkCopy 插入到我的表中。有 5 对列,一对是 URL 文本描述,一对是 URL 本身。这些 URL 将引用一个 html 或 pdf 文件,我稍后会将其拉入第二个单独的表中。

省略不相关的字段,我有一个包含字段的表[Base]

[ID] (identity)
[BaseID]
...一堆其他相关字段,然后...
[LinkText1]
[LinkURL1]
[LinkText2]
[LinkURL2]
[LinkText3]
[LinkURL3]
[LinkText4]
[LinkURL4]
[LinkText5]
[链接URL5]

URL/文件的存储将在一个表[Documents]中,其中包含以下字段:

[BaseIdentityID] - 引用 [Base] 表中的 ID 字段
[DocIndex] - 每条 Base 记录可以填写 1 - 5 个 URL。这是为了知道它是哪个 URL。
[MimeType]
[Url]
[Text]
[Content]
[Processed] - 位 - 稍后将提取 url 数据,这会标记。

我在 [Base] 表上使用了 INSTEAD OF 触发器。这些记录可以更新,因此我们将存档数据保留在表中。触发器查看我们正在插入的内容,将现有版本标记为旧版本,并将这个新的基本记录插入为 CurrentVersion。

在这个触发器中,我现在想根据 5 对 URL 数据中的每一对向 [Documents] 表中插入一个新行,并传入 Documents 表中 [BaseIdentityID] 的 [Base] ID 身份字段, LinkURL1 的 [DocIndex] 为 1,LinkURL2 的 [DocIndex] 为 2,等等...

很难想象我将如何准确地做到这一点。有什么建议么?我试图避免使用游标,因为我可以插入大量基本记录。

谢谢。

4

1 回答 1

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;
于 2012-12-13T19:21:17.787 回答