【发布时间】:2021-02-18 08:46:21
【问题描述】:
我有下表:
ColID Columns
1 SELECT Col1, Col2, Col3, Col4, Col5 FROM MyTab
我想获取 SELECT 和 FROM 之间的列名。
【问题讨论】:
标签: sql sql-server tsql
我有下表:
ColID Columns
1 SELECT Col1, Col2, Col3, Col4, Col5 FROM MyTab
我想获取 SELECT 和 FROM 之间的列名。
【问题讨论】:
标签: sql sql-server tsql
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
【讨论】:
如果这是您需要列的查询,您可以使用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')
【讨论】:
为了把它变成一张漂亮的桌子,我改进了(这么想:-))上面的小提琴
设置:
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 |
【讨论】: