我需要一个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
为什么你不知道你的表包含哪些列?这听起来像一个非常糟糕的数据库设计。 –