عملکرد SQL Server برای اتصال رشته ها
نمایش متن به خوبی قالب بندی شده
این تابع از نیاز به نمایش آدرس در یک رشته کاملاً قالب بندی شده به وجود آمده است. هنگام کار با این نوع داده ها ، اغلب موارد خالی ، مقادیر 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
داده های آزمون
برای اهداف آزمایش می توانیم یک جدول موقت ایجاد کنیم و چند آدرس ذخیره کنیم. دستور Select را با تابع ترکیب کنید و می توانید ببینید که چگونه یک مجموعه داده با قالب کاملاً واضح را باز می گرداند که برای اهداف نمایش مناسب است.
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