Kaedah SQL untuk mengembalikan data daripada berbilang jadual berdasarkan nama lajur
P粉904450959
P粉904450959 2024-02-21 19:21:21
0
1
452

Saya cuba melakukan sesuatu yang agak pelik tetapi tidak dapat mengetahui cara yang betul untuk mencapainya. Pada asasnya, saya cuba mengekstrak semua jadual/pandangan dan lajur di mana nama lajur adalah seperti rentetan tertentu. Selain itu, saya ingin mengekstrak 1 baris data daripada gabungan jadual/pandangan dan lajur itu. Bahagian kedua ialah tempat saya tersesat. Saya tahu saya boleh mengekstrak jadual/pandangan dan lajur yang diperlukan menggunakan pernyataan pilih di bawah.

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

Dengan cara ini saya akan mendapat sesuatu seperti di bawah

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

Tetapi saya ingin mendapatkan sesuatu seperti ini:

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

Bolehkah sesiapa memberikan sebarang pandangan?

P粉904450959
P粉904450959

membalas semua(1)
P粉392861047

Saya tidak dapat memikirkan cara mudah untuk melakukan ini dalam pertanyaan, tetapi inilah pilihan...

Letakkan senarai lajur dan jadual ke dalam jadual sementara dan jalankannya melalui gelung, menggunakan SQL dinamik untuk memilih baris terbesar bagi setiap jadual.

Saya menambah banyak komen di bawah untuk menjelaskannya.

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 
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan