sql - 将列值转换为字符串
问题描述
我正在尝试编写 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;
解决方案
在 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;
推荐阅读
- java - GMail API aliases.getSendAs().get(0).getDisplayName 返回空(只为0,不为下一个)
- javascript - 有人可以解释这种动态对象扩展运算符语法吗?
- javascript - 在 Angular CLI 项目中导入 SVG 文件?
- python - 删除重复空格并有效删除所有 \n 的简单方法
- python - 获取整数列表并计算最高重复值的函数
- python - 从字符串获取日期时间格式?
- git - 使用多个遥控器进行管理
- javascript - 如何使用 Node.js 在非常简单的 JS 文件中编辑对象
- ssas - 表格和多维模型的构建方式是否相同?
- reactjs - 如何以编程方式在 Material Ui 中展开或折叠树项?