【问题标题】:Get columns from another column从另一列获取列
【发布时间】:2021-02-18 08:46:21
【问题描述】:

我有下表:

ColID Columns
1     SELECT Col1, Col2, Col3, Col4, Col5 FROM MyTab

我想获取 SELECT 和 FROM 之间的列名。

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:
    CREATE TABLE dbo.Mytab(ColID int,  Columns varchar(max))
    INSERT INTO dbo.Mytab(ColID,Columns)
    VALUES(1,'SELECT Col1, Col2, Col3, Col4, Col5 FROM MyTab')
    GO
    
    SELECT SUBSTRING(Columns, CHARINDEX('SELECT', Columns) +6
    , CHARINDEX('FROM',Columns) - CHARINDEX('SELECT', Columns) - Len('FROM')-2)
    FROM dbo.Mytab
    
    | (无列名) | | :----------------------------- | | Col1, Col2, Col3, Col4, Col5 |

    db小提琴here

    【讨论】:

      【解决方案2】:

      如果这是您需要列的查询,您可以使用dm_exec_describe_first_result_set 获取它们:

      select name from sys.dm_exec_describe_first_result_set ( @myQuery, @parameters, 0)
      

      如果只是表格,可以使用sys.columns

      select name from sys.columns where object_id = object_id('dbo.myTable')
      

      【讨论】:

        【解决方案3】:

        为了把它变成一张漂亮的桌子,我改进了(这么想:-))上面的小提琴

        设置:

        CREATE TABLE dbo.Mytab(ColID int,  Columns varchar(max))
        INSERT INTO dbo.Mytab(ColID,Columns)
        VALUES(1,'SELECT Col1, Col2, Col3, Col4, Col5 FROM MyTab');
        INSERT INTO dbo.Mytab(ColID,Columns)
        VALUES(2,'SELECT Col3, Col4, Col5, Col6 FROM MyTab')
        

        查询:

        select m.colid, p.value from dbo.myTab m CROSS APPLY  string_split((SELECT SUBSTRING(m.Columns, CHARINDEX('SELECT',m.Columns) +6
        , CHARINDEX('FROM',m.Columns) - CHARINDEX('SELECT', m.Columns) - Len('FROM')-2) ) ,',') as p
        

        结果:

        colid value
        1 Col1
        1 Col2
        1 Col3
        1 Col4
        1 Col5
        2 Col3
        2 Col4
        2 Col5
        2 Col6

        【讨论】:

          猜你喜欢
          • 2014-09-06
          • 1970-01-01
          • 2020-12-19
          • 1970-01-01
          • 2011-09-13
          • 2021-09-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多