我有一个表T与2列C1和C2如何在T-SQL函数中为所有列名添加前缀?
我想要一个函数,返回T后,但所有列名前加“PREFIX_”。
前缀是传递给函数的动态字符串。
有可能吗?
我想是这样
SELECT C1 AS @prefix + 'C1',
C2 AS @prefix + 'C2'
FROM T
我有一个表T与2列C1和C2如何在T-SQL函数中为所有列名添加前缀?
我想要一个函数,返回T后,但所有列名前加“PREFIX_”。
前缀是传递给函数的动态字符串。
有可能吗?
我想是这样
SELECT C1 AS @prefix + 'C1',
C2 AS @prefix + 'C2'
FROM T
由于其已知的列数,你可以构建与别名和exec()
它的SQL字符串;
declare @prefix varchar(32) = 'prefix_'
declare @sql nvarchar(1024)
set @sql = 'select C1 as [' + @prefix + 'C1], C2 as [' + @prefix + 'C2] from T'
exec(@sql)
我可以使用exec返回表吗? – Rohit
'exec'在函数中不可用 –
即使您不知道已经存在的列,也可以这样做。
declare @prefix varchar(20)
declare @sqltext nvarchar(500)
set @prefix = 'prefix_'
declare @columnnames varchar(500)
select @columnnames = coalesce(@columnnames, '')+',' +column_name + ' '+ @prefix+column_name
from INFORMATION_SCHEMA.COLUMNS a where table_name = 't' and table_schema = 'dbo'
set @sqltext = 'select '+stuff(@columnnames,1,1,char(0))+' from t'
exec(@sqltext)
我可以创建一个函数来返回上述结果吗? – Rohit
不,但您可以创建一个存储过程并将结果重定向到一个表中。我没有看到使用此功能的优点。 –
@Rohit它只能用动态sql解决你的问题。动态SQL不会在函数中工作,您将不得不使用存储过程。 –
想要写入的函数总是在同一张表上运行,还是要指定任意表? – Tao
@Tao同表总是 – Rohit
我已经要求对您的问题进行编辑,以澄清您要更改列名称,而不是值。正如@Alex K.在下面指出的那样,某种形式的Dynamic SQL是返回结果集的唯一方式,它具有不同的/未知的模式。您不能使用函数,但可以将动态SQL包装在存储过程中。 – Tao