我正在嘗試撰寫一個 SQL 查詢,該查詢具有從另一個 SQL 查詢生成的列串列。我在 Microsoft SQL Server Management Studio 上作業。
這是獲取列串列的 SQL 查詢
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'table_name'
它回傳以下內容
| | COLUMN_NAME |
| -------- | -------------- |
| 1 | name1 |
| 2 | name2 |
| 3 | name3 |
這是我目前擁有的 SQL 查詢,它運行良好
SELECT DISTINCT name1, name2
FROM [table_catalog].[table_schema].[table_name]
這是它回傳的內容
| | name1 |name2 |
| -------- | -------------- |-------------- |
| 1 | value1 |a1 |
| 2 | value2 |a2 |
| 3 | value3 |a3 |
| 3 | value4 |a1 |
我想要做的是得到一個只包含第一個表中所有列的表,像這樣
| | name1 |name2 |name3 |
| -------- | -------------- |-------------- |-------------- |
| 1 | value1 |a1 |b1 |
| 2 | value2 |a2 |b2 |
| 3 | value3 |a3 |b1 |
| 3 | value4 |a1 |b2 |
這是我迄今為止的嘗試
SELECT DISTINCT
(SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'table_name')
FROM
[table_catalog].[table_schema].[table_name]
它沒有按預期作業,我也嘗試使用 CLE 和其他一些方法來做到這一點。但是,它們都不起作用。我在網上查了下,好像沒有多少人做過這種查詢,不知道有沒有別的辦法呢?我做錯了什么?
uj5u.com熱心網友回復:
為此,您將不得不使用動態 sql。
這是一個小的分步示例。完整的代碼會在最后。
首先,我們需要檢索變數中的列名。我們希望此變數填充所有列,table_name并用逗號分隔。這就是為什么我們使用for XML path('') The stuffis 來轉儲第一個逗號。
declare @ColNames varchar(max)
select @ColNames = stuff(( select ', ' column_name
from INFORMATION_SCHEMA.COLUMNS
where table_name = 'table_name'
for XML path('')
), 1, 2, '')
變數@ColNames 的內容將如下所示
name1, name2, name3
有了這個,我們可以構建我們的 sql 陳述句,也在一個變數中
declare @sql varchar(max)
set @sql = 'select ' @ColNames ' from table_name'
最后我們執行它
exec(@sql)
這應該會給你你需要的結果。
當然,您也可以將表名table_name放入變數中,使其更加靈活。
這是完整的代碼:
declare @TableName varchar(100) = 'SomeTableName'
declare @ColNames varchar(max)
select @ColNames = stuff(( select ', ' column_name
from INFORMATION_SCHEMA.COLUMNS
where table_name = @TableName
for XML path('')
), 1, 2, '')
declare @sql varchar(max)
set @sql = 'select ' @ColNames ' from ' @TableName
exec(@sql)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/370204.html
標籤:sql sql-server 查询语句
