簡體   English   中英

SQL查詢到存儲過程中的分隔字符串

[英]SQL Query Into Delimited String In Stored Procedure

我有桌子:

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的調用者。

謝謝。

請嘗試以下操作:

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, '')

基本上,我會在您的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)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM