資料庫表欄位資料分割問題__資料庫

來源:互聯網
上載者:User

有的時候為了減少儲存記錄數,可能會把多條記錄合并為一條顯示。這種情況的發生主要體現上記錄在表的其它欄位都相同,只有某一個欄位是變化的這種情況,例如人事管理中,部門中的相關人的ID都放在一條記錄的一個欄位中,中間用逗號隔開。現在的需求就是要將一條記錄按ID欄位分割成多條記錄。

CREATE TABLE [dbo].[Table_Dept]([DEPT_CODE] [int] NULL,[content] [nvarchar](50) NULL,[A0188s] [nvarchar](max) NULL) ON [PRIMARY]GOinsert into Table_Dept select 1000,'總務系','350,688,258' union all select 1001,'總經理室','2,3,4,298'

查詢該表結果如下,其中DEPT_CODE部門編碼,content是部門名稱,A0188s是相關人。

現在需要將A0188s中的ID分解為多條顯示。考慮採用自訂字串分割函數實現,分割函數指令碼:

CREATE   FUNCTION [dbo].[Split]   (   @c VARCHAR(MAX) ,   @split VARCHAR(50)   )   RETURNS @t TABLE ( col VARCHAR(50) )   AS  BEGIN      WHILE ( CHARINDEX(@split, @c) <> 0 )           BEGIN              INSERT  @t( col )               VALUES  ( SUBSTRING(@c, 1, CHARINDEX(@split, @c) - 1) )               SET @c = STUFF(@c, 1, CHARINDEX(@split, @c), '')           END      INSERT  @t( col ) VALUES  ( @c )       RETURN  END
但是該函數只能處理單條記錄,這裡考慮採用遊標遍曆原表,逐個分解然後儲存到暫存資料表中。

IF object_id('tempdb..#TEMPTB1') is not nullBEGINdrop table #TEMPTB1ENDCREATE table #TEMPTB1(    [DEPT_CODE] [int] NULL,    [content] [nvarchar](50) NULL,    [A0188s] [nvarchar](max) NULL)IF object_id('tempdb..#TEMPTB2') is not nullBEGINdrop table #TEMPTB2ENDCREATE table #TEMPTB2(    [pid] [nvarchar](max) NULL)declare @DEPT_CODE intdeclare @content varchar(50)declare @A0188s varchar(max)exec('declare my_cursor1 cursor for select * from [Table_Dept]')open my_cursor1declare @id1 sysnamedeclare @id2 sysnamedeclare @id3 sysnamefetch next from my_cursor1 into @id1,@id2,@id3while(@@fetch_status= 0)beginset @DEPT_CODE =convert(int,@id1)set @content =convert(varchar(50),@id2)set @A0188s =convert(varchar(max),@id3)truncate table #TEMPTB2     insert into #TEMPTB2 select * from Split(@A0188s,',')     insert into #TEMPTB1 select @DEPT_CODE,@content,pid from #TEMPTB2fetch next from my_cursor1 into @id1,@id2,@id3endclose my_cursor1deallocate my_cursor1select * from #TEMPTB1

得到最終結果




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.