SELECT Name FROM SysObjects Where XType='U' ORDER BY Name --讀取庫中的所有表名 cafe
-----------------
--測試數據
IF OBJECT_ID('tempdb..#tab') IS NOT NULL
DROP TABLE #tab
CREATE TABLE #tab(
id INT,
VALUE VARCHAR(20),
NAME VARCHAR(20)
)
INSERT INTO #tab
SELECT 1,'12|23','你好,hello' union all
SELECT 1,'456|1|35','Abc,efc,kkk' UNION ALL
SELECT 2,'12','pppp'
--測試數據結束
select * from #tab
go
CREATE FUNCTION [dbo].[ufn_SplitStringToTable]
(
@str VARCHAR(MAX) ,
@split VARCHAR(10)
)
RETURNS TABLE
AS
RETURN
( SELECT B.id
FROM ( SELECT [value] = CONVERT(XML , '<v>' + REPLACE(@str , @split , '</v><v>')
+ '</v>')
) A
OUTER APPLY ( SELECT id = N.v.value('.' , 'varchar(100)')
FROM A.[value].nodes('/v') N ( v )
) B
)
go
IF OBJECT_ID('tempdb..#t') IS NOT NULL
DROP TABLE #t
SELECT a.id AS id_mstr,a.[VALUE],a.name,b.*,identity (int,1,1) as rn into #t FROM #tab a
OUTER APPLY ufn_SplitStringToTable(a.[VALUE],'|') b
IF OBJECT_ID('tempdb..#t2') IS NOT NULL
DROP TABLE #t2
SELECT a.id AS id_mstr,a.[VALUE],a.name,b.*,identity (int,1,1) as rn into #t2 FROM #tab a
OUTER APPLY dbo.ufn_SplitStringToTable(a.name,',') b
go
SELECT a.id_mstr,
a.value,
a.name,
a.id AS value_n,
b.id AS name_n
FROM #t a
INNER JOIN #t2 b
ON a.rn = b.rn
AND a.id_mstr = b.id_mstr
AND a.value = b.value
這樣就把數據給進行轉換了。 根據字符 | 進行分割出來的