我遇到了一个问题,即concat不能将行连接为单个字符串。
这是行数据
这是有效的查询
declare @body nvarchar(MAX),
@details nvarchar(MAX)
set @details = ''
select @details = @details + '<B>' + f.name + '</B>: ' + COALESCE( s.select_value, d.field_data) + CHAR(13)+'<BR/>'
from primaryTable d
inner join fields f on f.field_id = d.field_id
left outer join select_fields s on s.field_id = d.field_id
and s.select_text = d.field_data
where data_id = 123
order by f.sort_id
此查询无效
declare @body nvarchar(MAX),
@details nvarchar(MAX)
set @details = ''
select @details = @details + '<B>' + f.name + '</B>: ' + COALESCE( s.select_value, d.field_data) + CHAR(13)+'<BR/>'
from primaryTable d
inner join fields f on f.field_id = d.field_id
left outer join select_fields s on s.field_id = d.field_id
and s.select_text = d.field_data
where data_id = 123
order by
case
when f.parent_id = 0
then f.sort_id
else (select fs.sort_id + 1
from fields fs
where fs.field_id = f.parent_id)
end,
case
when f.sort_id = 0 then 1
end desc,
f.sort_id
以上查询仅返回
<B>Contact Phone Number</B>:
<BR/>
我正在使用SQL Server 2012
根据请求,这里是表DDL
CREATE TABLE [dbo].[primaryTable ](
[na_fields_data_id] [int] IDENTITY(1,1) NOT NULL,
[data_id] [int] NOT NULL,
[field_id] [int] NOT NULL,
[field_data] [varchar](max) NULL CONSTRAINT [DF__na_survey__field__1332DBDC] DEFAULT (NULL),
CONSTRAINT [PK__na_surve__5E098220114A936A] PRIMARY KEY CLUSTERED
(
[na_fields_data_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
CREATE TABLE [dbo].[select_fields](
[field_select_id] [int] IDENTITY(1,1) NOT NULL,
[field_id] [int] NOT NULL,
[select_text] [varchar](255) NULL DEFAULT (NULL),
[select_value] [varchar](255) NULL DEFAULT (NULL),
[sort_id] [int] NULL DEFAULT (NULL),
PRIMARY KEY CLUSTERED
(
[field_select_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[fields ](
[field_select_id] [int] IDENTITY(1,1) NOT NULL,
[field_id] [int] NOT NULL,
[select_text] [varchar](255) NULL DEFAULT (NULL),
[select_value] [varchar](255) NULL DEFAULT (NULL),
[sort_id] [int] NULL DEFAULT (NULL),
PRIMARY KEY CLUSTERED
(
[field_select_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
答案 0 :(得分:0)
对不起,我的回复很晚,我完全被其他事情困扰了。
所以我解决的方法是通过获取动态sql输出并将其转储到临时表中,然后使用临时表联系最终输出。
示例:
select '<B>' + f.name + '</B>: ' + COALESCE( s.select_value, d.field_data) + CHAR(13)+'<BR/>' 'SELECTVALUE'
into #TempDump
from primaryTable d
inner join fields f on f.field_id = d.field_id
left outer join select_fields s on s.field_id = d.field_id
and s.select_text = d.field_data
where data_id = 123
order by
case
when f.parent_id = 0
then f.sort_id
else (select fs.sort_id + 1
from fields fs
where fs.field_id = f.parent_id)
end,
case
when f.sort_id = 0 then 1
end desc,
f.sort_id
SELECT @details = @details + x.SELECTVALUE FROM #TempDump x