我有一张桌子Employee
,上面有几个字段FirstName,LastName,Email,.......
。所以我想做的是,在我的情况下,列的选择是动态的
Declare @columnNeeded nvarchar(max)
例子一
Set @columnNeeded = 'FirstName,Email'
Select @columnNeeded from Employee
例子二
Set @columnNeeded = 'FirstName,LastName'
Select @columnNeeded from Employee
这非常简单,现在我想要的是无论结果集将位于哪一列,我都需要在一列中选择所有列作为逗号分隔的字符串。我在mysql中看到了Group_Concat(),但是不知道如何在sql中执行此操作,那么这可能吗?
您可以使用动态SQL执行此操作:
declare @sql nvarchar(max) = 'select @columns from Employee';
declare @columnNeeded nvarchar(max) = 'FirstName,Email';
set @sql = replace(@sql, '@columns', @columnNeeded);
exec sp_executesql @sql;
编辑:
如果希望将它们作为一列,则可以执行以下操作:
declare @sql nvarchar(max) = 'select @columns from Employee';
declare @columnNeeded nvarchar(max) = 'FirstName,Email';
set @sql = replace(replace(@sql, '@columns', @columnNeeded), ',', '+'',''+');
exec sp_executesql @sql;
为了确保类型安全,您可以强制转换列值:
declare @tmp nvarchar(4000) = 'cast(' +
replace(@columnNeeded, ',', ', nvarchar(4000)), cast(') +
', nvarchar(4000))'
set @sql = replace(replace(@sql, '@columns', @columnNeeded), ',', '+'',''+');
如果这按预期工作,则将其添加cast(<col> as nvarchar(4000))
到列表中的每个列中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句