首页 > 解决方案 > 将列值转换为字符串

问题描述

我正在尝试编写 e proc,它将列值转换为用字符分隔的字符串:例如,','。它停留在这一行exec @maxcount = sp_executesql @temp并返回@maxxount 的值任何建议我如何设置动态查询执行的值,以便它继续处理所有执行正确答案的函数。

ALTER procedure [dbo].[usp_stringConvert](
 @table_name varchar(101),
 @column_name varchar(100),
 @separator varchar(20)
 )
as 

declare @maxcount int, @temp nvarchar(1000)
declare @count int
declare @result varchar(1000)
set @result =''
set @count =1
set @temp= Concat('select count(', @column_Name ,') from ', @table_name)
exec @maxcount =  sp_executesql @temp
while (@count<@maxcount)
begin
    if @count!=1
        set @result+=@separator
    set @temp=Concat('select ' , @column_name ,' from ' , @table_name , 'where @count = row_number() over(order by (select (100)))')
    exec @temp = sp_executesql @temp
    set @result =CONCAT(@result, @temp)
    set @count+=1;
end
select @result;

标签: sqlsql-servertsql

解决方案


在 SQL Server 中使用常规 SQL,您可以使用以下方法连接字符串:

select stuff( (select concat(separator, column_name)
               from table_name
               for xml path ('', type)
              ).value('.', nvarchar(max)
                     ), 1, len(separator), ''
             )

您应该能够使用以下方法将其转换为动态 SQL:

declare @sql nvarchar(max);
declare @result nvarchar(max);

set @sql = N'
select @result = stuff( (select concat(@separator + [column_name]
                         from [table_name]
                         for xml path ('''', type)
                        ).value(''.'', nvarchar(max)
                               ), 1, len(@separator), ''
                      )
';

set @sql = replace(@sql, '[table_name]', quotename(@table_name));
set @sql = replace(@sql, '[column_name]', quotename(@column_name));

exec sp_executesql @sql,
                   N'@result nvarchar(max) output',
                   @result=@result output;

select @result;

推荐阅读