- 论坛徽章:
- 0
|
解决方案如下:
SELECT * FROM A
id name
---------- --------
01 aa
02 bb
03 cc
0101 abc
0102 abb
0201 bab
010102 adsa
010203 gdea
020103 jgsd
01010203 loikj
CREATE PROC PROC_A
AS
BEGIN
DECLARE @X VARCHAR(10)
SET @X = \'/\'
DECLARE @N INT --动态的定义表名
--SET @N = 1
DECLARE @SQL NVARCHAR(1000) --动态SQL
DECLARE @MAX_LEN INT
SET @MAX_LEN =(SELECT MAX(LEN(ID)) FROM A)
--SELECT @MAX_LEN
DECLARE @I INT
SET @I = 2
DECLARE @SQL1 NVARCHAR(1000)
DECLARE @I1 INT
SET @I1 = 1
DECLARE @M INT
SET @M = 0
DECLARE @SQL2 NVARCHAR(1000)
WHILE (@I <= @MAX_LEN)
BEGIN
SET @N = @I / 2
SET @SQL = N\'CREATE TABLE TEMP\' + CAST(@N AS NVARCHAR) + N\' (ID VARCHAR(50),[NAME] VARCHAR(50)) \' +
N\'INSERT INTO TEMP\' + CAST(@N AS NVARCHAR) + N\' SELECT ID,[NAME] FROM A WHERE LEN(ID) = @I \'
EXEC SP_EXECUTESQL @SQL,N\'@I INT\',@I
SET @I = @I + 2
--SET @N = @N + 1
END
--
--DECLARE @I1 INT
--SET @I1 = 1
--DECLARE @SQL1 NVARCHAR(1000)
WHILE (@I1 <= @N - 1)
BEGIN
SET @SQL1 = N\'CREATE TABLE TEMP\' + CAST(@N+@I1 AS NVARCHAR) + N\'(ID VARCHAR(50),[NAME] VARCHAR(50)) \'+
N\'INSERT INTO TEMP\' + CAST(@N+@I1 AS NVARCHAR) + N\' SELECT TEMP\' + CAST(@I1+1 AS NVARCHAR) + N\'.ID,\'+
N\'TEMP\' + CAST(@I1+@M AS NVARCHAR) + N\'.[NAME]\' + \'+\' + \'@X\' + \'+\' + N\'TEMP\' + CAST(@I1+1 AS NVARCHAR) + N\'.[NAME]\'+
N\' FROM TEMP\' + CAST(@I1+@M AS NVARCHAR) + N\' FULL JOIN \' + N\' TEMP\' + CAST(@I1+1 AS NVARCHAR) +
N\' ON LEFT(TEMP\' + CAST(@I1+@M AS NVARCHAR) + N\'.ID,@I1*2) = LEFT(TEMP\' + CAST(@I1+1 AS NVARCHAR) + N\'.ID,@I1*2) \'+
N\' WHERE TEMP\' + CAST(@I1+1 AS NVARCHAR) + N\'.ID IS NOT NULL \'
EXEC SP_EXECUTESQL @SQL1,N\'@I1 INT,@X VARCHAR(10)\',@I1,@X
SET @I1 = @I1 + 1
SET @M = @N - 1
END
DECLARE @A INT
SET @A = 1
CREATE TABLE TEMP (ID VARCHAR(50),[NAME] VARCHAR(50))
INSERT INTO TEMP
SELECT * FROM TEMP1
WHILE (@A <= @I1-1)
BEGIN
SET @SQL2 = N\'INSERT INTO TEMP SELECT * FROM TEMP\' + CAST(@N+@A AS NVARCHAR)
EXEC (@SQL2)
SET @A = @A + 1
END
DROP TABLE TEMP1
DROP TABLE TEMP2
DROP TABLE TEMP3
DROP TABLE TEMP4
DROP TABLE TEMP5
DROP TABLE TEMP6
DROP TABLE TEMP7
SELECT * FROM TEMP
DROP TABLE TEMP
END
EXEC PROC_A
ID NAME
-------------------------------------------------- --------------------------------------------------
01 aa
02 bb
03 cc
0101 aa/abc
0102 aa/abb
0201 bb/bab
010102 aa/abc/adsa
010203 aa/abb/gdea
020103 bb/bab/jgsd
01010203 aa/abc/adsa/loikj |
|