2011-08-11 99 views
0

我有一个表T与2列C1和C2如何在T-SQL函数中为所有列名添加前缀?

我想要一个函数,返回T后,但所有列名前加“PREFIX_”。

前缀是传递给函数的动态字符串。

有可能吗?

我想是这样

SELECT C1 AS @prefix + 'C1', 
    C2 AS @prefix + 'C2' 
FROM T 
+0

想要写入的函数总是在同一张表上运行,还是要指定任意表? – Tao

+0

@Tao同表总是 – Rohit

+0

我已经要求对您的问题进行编辑,以澄清您要更改列名称,而不是值。正如@Alex K.在下面指出的那样,某种形式的Dynamic SQL是返回结果集的唯一方式,它具有不同的/未知的模式。您不能使用函数,但可以将动态SQL包装在存储过程中。 – Tao

回答

0

由于其已知的列数,你可以构建与别名和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) 
+0

我可以使用exec返回表吗? – Rohit

+0

'exec'在函数中不可用 –

1

即使您不知道已经存在的列,也可以这样做。

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) 
+0

我可以创建一个函数来返回上述结果吗? – Rohit

+0

不,但您可以创建一个存储过程并将结果重定向到一个表中。我没有看到使用此功能的优点。 –

+0

@Rohit它只能用动态sql解决你的问题。动态SQL不会在函数中工作,您将不得不使用存储过程。 –

相关问题