рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП SQL рд╕рд░реНрд╡рд░ рдлрдВрдХреНрд╢рди
рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рд░реВрдкрд┐рдд рдкрд╛рда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛
рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рд░реВрдкрд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдПрдХ рдкрддрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдкреИрджрд╛ рд╣реБрдЖ рдерд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдбреЗрдЯрд╛ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдЕрдХреНрд╕рд░ рд░рд┐рдХреНрдд, NULL рдорд╛рди рдФрд░ рдХрднреА-рдХрднреА рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рдЯреЗрдХреНрд╕реНрдЯ рд╣реЛрддреЗ рд╣реИрдВред рд╕реНрддрдВрднреЛрдВ рдХреЗ рдорд╛рдирдХ рд╕рдВрдпреЛрдЬрди рдиреЗ рдЕрдВрдд рдореЗрдВ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдпрд╛ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдХреЗ рд╕рд╛рде рджреЛрд╣рд░реЗ рд╕реАрдорд╛рдВрдХрдХ рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд┐рдпрд╛ред
рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рд╣рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ, рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЛ рдЫреЛрдбрд╝рдХрд░, рд╕рдлреЗрдж рд╕реНрдерд╛рди рдХреЛ рдЯреНрд░рд┐рдо рдХрд░рдиреЗ рдФрд░ рдкреАрдЫреЗ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдЕрдХреЗрд▓реЗ рдорд╛рдирдХ COALESCE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдЗрд╕реЗ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдХрд╛рдЯрд╛ред
рд╣рдордиреЗ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдФрд░ рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЖрдЬрдорд╛рдП рд╣реБрдП рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП TextToRows рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдлрд┐рд░ рдЯреЗрдХреНрд╕реНрдЯ рдорд╛рдиреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдПрдХ рдирдИ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд▓рд┐рдЦрд╛ред рдЗрд╕рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреА рдкрд╕рдВрдж рдХреЗ рд╕реАрдорд╛рдВрдХрдХ рдХреЗ рд╕рд╛рде рдкреБрди: рдЙрдкрдпреЛрдЧ рдпреЛрдЧреНрдп рд╣реИред
SQL
ALTER FUNCTION dbo.TextConc(@Text NVARCHAR(MAX),@Delim CHAR(1),@Sep CHAR(2)) RETURNS NVARCHAR(MAX) WITH SCHEMABINDING AS BEGINDECLARE @Str NVARCHAR(MAX)SELECT @Str=COALESCE(@Str+@Sep,'')+REPLACE(WordStr,@Delim,'')FROM dbo.TextToRows(@Delim,@Text)WHERE WordStr<>''RETURN REPLACE(@Str,@Sep+@Sep,@Sep)ENDGO
рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛
рдкрд░реАрдХреНрд╖рдг рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рдкрддреЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЪрдпрди рдХрдерди рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдПрдХ рдХреБрд░рдХреБрд░рд╛ рд╕реНрд╡рд░реВрдкрд┐рдд рдбреЗрдЯрд╛ рд╕реЗрдЯ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рджрд░реНрд╢рди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХрджрдо рд╕рд╣реА рд╣реИред
SQL
DECLARE @Address TABLE(AddressName NVARCHAR(100),AddressL1 NVARCHAR(100),AddressL2 NVARCHAR(100),AddressL3 NVARCHAR(100),AddressCity NVARCHAR(100),AddressCounty NVARCHAR(100),AddressCountry NVARCHAR(100),AddressPostCode NVARCHAR(100))INSERT INTO @AddressSELECT 'Mountain View','1600 Amphitheatre Parkway',NULL,NULL,'Mountain View','California','United States','94043'INSERT INTO @AddressSELECT 'London','1-13 St Giles High St',NULL,NULL,'London','London','United Kingdom','WC2H 8LG'SELECT dbo.TextConc(ISNULL(AddressName,'')+','+ISNULL(AddressL1,'')+','+ISNULL(AddressL2,'')+','+ISNULL(AddressL3,'')+','+ISNULL(AddressCity,'')+','+ISNULL(AddressCounty,'')+','+ISNULL(AddressCountry,'')+','+ISNULL(AddressPostCode,''),',',', ')FROM @Address
Results
рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВ
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ SCHEMABINDING рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдмрдирд╛рдпрд╛ рд╣реИ, рд╣рдо рдЗрд╕реЗ рдПрдХ рдЧрдгрдирд╛ рдХреЙрд▓рдо рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдзреНрдпрд╛рди рджреЗрдВ, рдЗрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рддреЗ рд╕рдордп, рдпрд╣ рдХреНрд╡реЗрд░реА рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЖрдо рддреМрд░ рдкрд░ рдбреЗрдЯрд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреА рдЧрдгрдирд╛ рдХреЗрд╡рд▓ рд╕рдореНрдорд┐рд▓рд┐рдд/рдЕрджреНрдпрддрди рд▓реЗрдирджреЗрди рдкрд░ рдХреА рдЬрд╛рддреА рд╣реИред
SQL
CREATE TABLE TestAddress(AddressName NVARCHAR(100),AddressL1 NVARCHAR(100),AddressL2 NVARCHAR(100),AddressL3 NVARCHAR(100),AddressCity NVARCHAR(100),AddressCounty NVARCHAR(100),AddressCountry NVARCHAR(100),AddressPostCode NVARCHAR(100),AddressDisplay as dbo.TextConc(ISNULL(AddressName,'')+','+ISNULL(AddressL1,'')+','+ISNULL(AddressL2,'')+','+ISNULL(AddressL3,'')+','+ISNULL(AddressCity,'')+','+ISNULL(AddressCounty,'')+','+ISNULL(AddressCountry,'')+','+ISNULL(AddressPostCode,''),',',', ') PERSISTED)INSERT INTO TestAddressSELECT 'Mountain View','1600 Amphitheatre Parkway',NULL,NULL,'Mountain View','California','United States','94043'INSERT INTO TestAddressSELECT 'London','1-13 St Giles High St',NULL,NULL,'London','London','United Kingdom','WC2H 8LG'SELECT * FROM TestAddressDROP TABLE TestAddress