我有桌子:
CREATE TABLE [address_tabletype] (
[CONTROL_NUMBER] [varchar](12) NULL,
[ADDRESS1] [varchar](50) NULL,
[ADDRESS2] [varchar](50) NULL,
[CITY] [varchar](50) NULL,
[STATE] [varchar](2) NULL,
[ZIP] [varchar](10) NULL
)
GO
并说,我有以下几行:
2506387 1 2 3 4 5
2506394 1 2 3 4 5
2506403 1 2 3 4 5
我想看起来像:
2506387|1|2|3|4|5~2506394|1|2|3|4|5~2506403|1|2|3|4|5
我没有尝试任何事情,因为我真的不知道从哪里开始。
我正在使用SQL Server 2008 R2,并将使用临时表来构建此字符串。
修改
我正在使用它来传递给第三方CLR函数,它以这种方式绝对需要一个分隔的字符串。我打算将它发送到函数,将其返回到SP,将其分解为原始格式,然后将结果返回给SP的调用者。
谢谢。
答案 0 :(得分:3)
请尝试以下操作:
SELECT STUFF((select (
SELECT '~' + (
CONTROL_NUMBER+'|'+
ADDRESS1 +'|'+
ADDRESS2 + '|'+
CITY + '|'+
[States] + '|'+
ZIP)
FROM address_tabletype
FOR XML PATH(''), type
).value('text()[1]', 'varchar(max)')), 1, 1, '')
答案 1 :(得分:0)
基本上我会在你的SP中使用这样的东西:
声明你的临时表变量,注意添加你想要的所有字段:
declare @rowsToConcat table ([ID] int identity(1,1),[CONTROL_NUMBER] varchar(12), ...repeat for all of your fields)
insert into @rowsToConcat
select * from [address_tabletype]
declare @loopcnt int
declare @concat_output as varchar(1000)
set @loopcnt = 1
while(@loopcnt < (select max([ID]) from @rowsToConcat))
begin
select @concat_output = @concat_output + [CONTROL_NUMBER] + '|' + [..all other fields] + '~'
from @rowsToConcat
where [ID] = @loopcnt
set @loopcnt = @loopcnt+1
end
只需键入此内容而不在此处进行测试,我没有填写您的所有字段,而是放置..所有其他字段供您重复。我使用这种技术很适合我。还没有测试,但如果您不知道预期会有多少结果,您可能想让@concat_output成为varchar(max)。