首页 > 解决方案 > T-SQL 查询将数据插入到具有可变列数的表中

问题描述

我正在尝试将表 A 中的数据插入表 B 中,假设数据按其外观排序。

数据应该加载到表 B 的方式是通过 id_column。例如,具有 id_column 1 的数据必须加载到 C01 列。请注意,并非所有数据都具有与 BLOCK 1 或 BLOCK 3 的 int 相同数量的 column_id。

我遇到的问题是表 B 并不总是具有相同数量的列。在这种情况下,它有 4 列,但它可能是 5 或更多或更少,所以我正在尝试的是让我有机会使用不同数量的列。

(当我之前创建了表 B 时,我在考虑表 A 的最大 id_column 时这样做了)

图片

请问,有什么建议吗?

标签: sqlsql-servertsqlpivot

解决方案


INSERT 语句无法处理一组动态列。您必须指定要插入哪些列,这意味着您必须选择一组特定的列,并且与插入的顺序相同。

拥有像您所拥有的那样的表 A 是动态创建数据集的一种流行方法,并且拥有像这样的表通常是数据库中该数据的结尾。大多数应用程序不会尝试以任何其他方式在数据库中解释该数据(例如也将其存储在表 B 中),而是从表 A 中进行选择,然后将数据解析为代码中的对象。

对于具有未知列的数据集,我喜欢做的另一个选择是将未知部分存储在 xml 列中,然后为您知道的内容设置列。

一个例子是

CREATE TABLE tblData
(
   BlockID int NOT NULL PRIMARY KEY,
   Data xml
)

然后在代码中,您将使用所有随机列构建 xml 块。然后在代码中再次解析它。这为您提供了未知的灵活性。特别是如果其中一些未知列可能包含您不想为其他未知列保留的其他元数据。


推荐阅读