【发布时间】:2019-07-27 08:51:49
【问题描述】:
我有两张桌子。一个表有 500 列的列表。另一个表像这样引用每个列名
Select Top 1 * from MyReferenceTable
返回结果
(69, 'FirtName', 1, NULL)
(69, 'LastName', 2, NULL)
其中 'FirstName' 是实际表中列的名称。
所以我想用另一个表中的列名来填充这个引用表
Insert Into MyReferenceTable
FileId, ColumnName1, ColumnOrder, DefaultValue
Values(69, Select ColumnName From OtherTable? ,
Select Next Sequential Identity?, NULL)
我的问题是如何遍历另一个表以获取每一行的列名,同时在 sequenceOrder 中插入一个标识作为 ColumnOrder?
为超过 500 列手动输入插入语句需要花费很多时间。
【问题讨论】:
-
这是一个非常糟糕的设计选择,你现在应该避免它。如果您只是想要表中列的名称,您有
sys.columns和INFORMATION_SCHEMA.COLUMNS对象,但您不应该存储这些信息(因为它已经可供您使用)。如果您打算使用这些数据来尝试创建将列值“替换”为列名称的语句,您会(非常)很快发现这不起作用。 -
感谢您的 cmets。这个决定超出了我的薪酬等级。
-
那么那个薪级的人应该更清楚。看来我的假设是正确的,这意味着您将很快发现您可能会陷入动态 SQL、没有约束的外键和/或由于大量查询计划而导致的糟糕查询计划。
LEFT JOIN的。您可能想查看一些讨论此类设计及其局限性/缺陷并提出它们的文章。如果您现在可以将项目朝着正确的方向推进,那么您会发现将来事情会容易得多。
标签: sql sql-server tsql ssms sql-server-2016