选择带有函数的所有列

use*_*567 5 sql t-sql sql-server

这是否可能以任何方式在 SELECT 中的所有列上应用函数。例如,

SELECT LEN(t.*) FROM Table t;
Run Code Online (Sandbox Code Playgroud)

问题是该表是动态的,列数是动态的,我需要在每个列上应用一个函数。

Ale*_* K. 4

不,你需要一些动态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)