循环浏览一个表中的每个列名,然后将该名称插入到另一个表中?

时间:2019-03-05 19:46:07

标签: sql sql-server tsql ssms sql-server-2016

我有两个桌子。一个表包含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列的insert语句将花费很多时间。

1 个答案:

答案 0 :(得分:1)

这是一个糟糕的主意,但是您问题的答案很简单:

INSERT INTO MyReferenceTabel (FileId, ColumnName1, ColumnOrder, DefaultValue)
    SELECT 69, [name], [column_id], NULL
      FROM sys.columns 
     WHERE [object_id] = OBJECT_ID('MyOtherTable')

基本上,您可以设计一个SELECT语句来返回所需的值,然后在其上添加INSERT语句。

但是,这又一次可怕的设计选择的味道,最终会刺痛您。但是知道如何获取此信息仍然很好,因此我将在此发布示例。