2016-12-15 67 views

回答

0

您需要創建功能到的值分成行

create function [dbo].[udf_splitstring] (@tokens varchar(max), 
             @delimiter varchar(5)) 
returns @split table (
    token varchar(200) not null) 
as 
    begin 
     declare @list xml 

     select @list = cast('<a>' 
          + replace(@tokens, @delimiter, '</a><a>') 
          + '</a>' as xml) 

     insert into @split 
        (token) 
     select ltrim(t.value('.', 'varchar(200)')) as data 
     from @list.nodes('/a') as x(t) 

     return 
    end 

select * from into #a udf_splitstring ('[27784].[41],[27781].[41],[27779].[41]',',') 

輸出

[27784].[41] 
[27781].[41] 
[27779].[41] 

未來結果存儲在一個臨時表

SELECT TOKEN,REPLACE(REPLACE(SUBSTRING(TOKEN,0,CHARINDEX('.',TOKEN)),'[',''),']','') AS first_id 
     ,REPLACE(REPLACE(REVERSE(SUBSTRING(REVERSE(TOKEN),0,CHARINDEX('.',REVERSE(TOKEN)))),'[',''),']','') AS second_id 
FROM #a 

輸出

TOKEN first_id second_id 
[27784].[41] 27784 41 
[27781].[41] 27781 41 
[27779].[41] 27779 41 
0

試試這個:

DECLARE @START_ID VARCHAR(100)='[27784].[41],[27781].[41],[27779].[41]' 
DECLARE @ID VARCHAR(MAX) 
DECLARE @COUNT INT 
DECLARE @TEMP TABLE(C1 VARCHAR(MAX)) 

    WHILE(CHARINDEX(',',@START_ID))>0 
    BEGIN 
    INSERT INTO @TEMP SELECT SUBSTRING(@START_ID,0,CHARINDEX(',',@START_ID)) 
    SET @START_ID=(SELECT REPLACE(@START_ID,(SUBSTRING(@START_ID,0,CHARINDEX(',',@START_ID)+1)),'')) 
    END 
    INSERT INTO @TEMP SELECT @START_ID 

SELECT C1,REPLACE(REPLACE(SUBSTRING(C1,0,CHARINDEX('.',C1)),'[',''),']','') AS SOURCE_ACCOUT_ID 
     ,REPLACE(REPLACE(REVERSE(SUBSTRING(REVERSE(C1),0,CHARINDEX('.',REVERSE(C1)))),'[',''),']','') AS SOURCE_DATABASE_ID 
FROM @TEMP 
0
select  n.ids.value ('id[1]','int') as accountid 
      ,n.ids.value ('id[2]','int') as dbid 

from  (select  cast (replace('<r><e><id>'+replace(replace(replace(
          ids,'[',''),']',''),',','</id></e><e><id>')+ 
           '</id></e></r>','.','</id><id>') as xml) as x 
      from  mytable 
      ) t 
      cross apply x.nodes ('/r/e') n(ids) 

+-----------+------+ 
| accountid | dbid | 
+-----------+------+ 
| 27784  | 41 | 
+-----------+------+ 
| 27781  | 41 | 
+-----------+------+ 
| 27779  | 41 | 
+-----------+------+ 
| 28021  | 30 | 
+-----------+------+ 
| 28024  | 30 | 
+-----------+------+ 
| 29007  | 56 | 
+-----------+------+ 

DDL + DML用於演示

create table mytable (ids varchar(1000)) 

insert into mytable values 

    ('[27784].[41],[27781].[41],[27779].[41]') 
, ('[28021].[30],[28024].[30]') 
, ('[29007].[56]') 
相關問題