根据列名从多个表返回数据的SQL方法
P粉904450959
P粉904450959 2024-02-21 19:21:21
0
1
453

我正在尝试做一些有点奇怪的事情,但无法找出完成它的正确方法。本质上,我试图提取所有表/视图和列,其中列名称就像某个字符串。除此之外,我想从该表/视图和列组合中提取 1 行数据。第二部分是我迷失的地方。我知道我可以使用下面的 select 语句提取必要的表/视图和列。

SELECT      COLUMN_NAME AS 'ColumnName'
            ,TABLE_NAME AS  'TableName'
FROM        INFORMATION_SCHEMA.COLUMNS
WHERE       COLUMN_NAME LIKE '%email%'
ORDER BY    TableName,ColumnName;

这样我就会得到类似下面的东西

|ColumnName   |TableName   |
|emailAddress |all_emails  |
           ....

但我想要得到这样的东西:

|ColumnName   |TableName   |Example             |
|emailAddress |all_emails  |[email protected]|
                    ....

有人可以提供任何见解吗?

P粉904450959
P粉904450959

全部回复(1)
P粉392861047

我想不出一种简单的方法来在查询中执行此操作,但这里有一个选项......

将列和表的列表放入临时表中,并通过循环运行它们,使用动态 SQL 为每个表选择最大行。

我在下面添加了大量评论来解释它。

DECLARE @SQL NVARCHAR(1000)
DECLARE @TABLE NVARCHAR(1000)
DECLARE @COLUMN NVARCHAR(1000)
DECLARE @SAMPLE NVARCHAR(1000)

DROP TABLE IF EXISTS ##TABLELIST

SELECT      COLUMN_NAME AS 'ColumnName'
           ,TABLE_NAME AS  'TableName'
           ,ROW_NUMBER() OVER (ORDER BY COLUMN_NAME,TABLE_NAME)[RN]

INTO ##TABLELIST

FROM        INFORMATION_SCHEMA.COLUMNS
WHERE       COLUMN_NAME LIKE '%email%';



ALTER TABLE ##TABLELIST

ADD [Sample] NVARCHAR(1000) -- Add a column for your sample row.

DECLARE @ROWCOUNTER INT = 1 -- Add a counter for the loop to use.

WHILE @ROWCOUNTER 
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板