use*_*567 5 sql t-sql sql-server
这是否可能以任何方式在 SELECT 中的所有列上应用函数。例如,
SELECT LEN(t.*) FROM Table t;
Run Code Online (Sandbox Code Playgroud)
问题是该表是动态的,列数是动态的,我需要在每个列上应用一个函数。
不,你需要一些动态sql;
declare @table varchar(256) = 'the_table'
declare @sql nvarchar(4000) = ''
select
@sql += case @sql when '' then '' else ',' end + ' func(' + quotename(column_name) + ') as ' + quotename(column_name)
from
information_schema.columns
where
table_name = @table
set @sql = 'select' + @sql + ' from ' + @table
exec(@sql)
Run Code Online (Sandbox Code Playgroud)
它产生并执行
select func([fld1]) as [fld1], func([fld2]) as [fld2] ... from the_table
Run Code Online (Sandbox Code Playgroud)