我需要一個select查詢,它返回某些列的值。 我想要的列以'U_S'開頭。SQL - 子查詢(列名)
Select * from em
我需要轉換上面的查詢。在「*」必須是結果(而用逗號):
select COLUMN_NAME from information_schema.columns
where table_name='em' and column_name like 'u_s%'
我需要一個select查詢,它返回某些列的值。 我想要的列以'U_S'開頭。SQL - 子查詢(列名)
Select * from em
我需要轉換上面的查詢。在「*」必須是結果(而用逗號):
select COLUMN_NAME from information_schema.columns
where table_name='em' and column_name like 'u_s%'
有這樣的例子不勝枚舉,但我明白,有時候我們都需要一點點踢啓動。
Select Stuff((Select ',' +quotename(Column_Name)
From information_schema.columns
Where table_name='em' and column_name like 'u_s%'
For XML Path ('')),1,1,'')
它像預期的那樣返回數據。但是我不能在另一個查詢中使用它。喜歡:從@ 012選擇@mytemp –
@HugoNunes如果那是你的意圖,你將不得不去動態化 –
select CAST(
(select COLUMN_NAME + ','
from information_schema.columns
where table_name='em' and column_name like 'u_s%'
for xml path('')
) as nvarchar(max)
)
,你將不得不刪除最後一個逗號......
您也可以直接選擇列名到一個變量,然後可以使用動態SQL。
declare @Cols varchar(max) = null;
select @Cols = concat(@Cols +', ',quotename(COLUMN_NAME))
from information_schema.columns
where table_name='em' and column_name like 'u_s%'
order by column_name;
--select @Cols as Cols;
declare @SQL varchar(max);
set @SQL = 'select '+ @Cols +' from em';
exec(@SQL);
@Cols最初爲null,null +','爲null。
所以結果不會以逗號開頭。
quotename函數僅作爲安全措施添加。
以防萬一列名有時在名稱中有空格。
可以使用代碼象下面這樣:
declare @col varchar(500)
select @col=Stuff((Select ',' +quotename(Column_Name)
From information_schema.columns
Where table_name='em' and column_name like 'u_s%'
For XML Path ('')),1,1,'')
exec('select '[email protected]
+' from em')
你試圖讓與數據庫中的所有表'U_S'開頭的所有列名? – Joby
您必須動態生成SQL,然後使用[sp_executesql]執行該命令(https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-executesql-transact- SQL)在存儲過程中。你可以在下面使用@ johncappelletti的出色答案來讓你的字段列表逗號分開。 – JNevill
爲什麼你不知道你的表包含哪些列?這聽起來像一個非常糟糕的數據庫設計。 –