You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2019动态拼接每行列名与值为单字符串的方案问询

SQL Server 2019 动态生成行拼接字符串方案

方案说明

本方案完全适配动态表、自定义分隔符需求,自动处理NULL值输出为NULL字符串、自动兼容数值/字符串等不同数据类型转换。


1. 基础测试环境(与你提供的结构一致)

CREATE TABLE myTable 
(
    COL1 int, 
    COL2 varchar(10), 
    COL3 float
)

INSERT INTO myTable
VALUES (1, 'c2r1', NULL), (2, 'c2r2', 2.335)

2. 单次使用动态脚本

可直接修改参数适配不同表、不同分隔符:

DECLARE 
    @TableName SYSNAME = 'myTable', -- 自定义要查询的表名
    @Separator VARCHAR(10) = '|', -- 自定义列之间的分隔符
    @Sql NVARCHAR(MAX)

-- 动态拼接所有列的转换逻辑
SELECT @Sql = COALESCE(@Sql + ' + ''' + @Separator + ''' + ', '') + 
    '''' + c.name + '='' + ISNULL(CAST(' + QUOTENAME(c.name) + ' AS VARCHAR(MAX)), ''NULL'')'
FROM sys.columns c
JOIN sys.tables t ON c.object_id = t.object_id
WHERE t.name = @TableName
ORDER BY c.column_id

-- 拼接最终查询语句
SET @Sql = 'SELECT ' + @Sql + ' AS line_str FROM ' + QUOTENAME(@TableName)

-- 执行动态SQL
EXEC sp_executesql @Sql

3. 复用型存储过程封装

如果需要频繁调用,可以封装为存储过程,直接传参数即可:

CREATE OR ALTER PROC GetTableLineStr
    @TableName SYSNAME,
    @Separator VARCHAR(10) = '|' -- 默认分隔符为|
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @Sql NVARCHAR(MAX)

    SELECT @Sql = COALESCE(@Sql + ' + ''' + @Separator + ''' + ', '') + 
        '''' + c.name + '='' + ISNULL(CAST(' + QUOTENAME(c.name) + ' AS VARCHAR(MAX)), ''NULL'')'
    FROM sys.columns c
    JOIN sys.tables t ON c.object_id = t.object_id
    WHERE t.name = @TableName
    ORDER BY c.column_id

    SET @Sql = 'SELECT ' + @Sql + ' AS line_str FROM ' + QUOTENAME(@TableName)
    EXEC sp_executesql @Sql
END
GO

-- 调用示例
EXEC GetTableLineStr @TableName = 'myTable', @Separator = '|'

输出结果

和你期望的输出一致:

COL1=1|COL2=c2r1|COL3=NULL
COL1=2|COL2=c2r2|COL3=2.335

注意事项

  • 如果表属于非默认架构,可自行修改脚本增加@SchemaName参数,在查询sys.tables时增加schema过滤条件
  • 如果需要处理超长字符串或中文字符,可将VARCHAR(MAX)替换为NVARCHAR(MAX)避免乱码或截断

内容的提问来源于stack exchange,提问作者gilberke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 21:06:08