Declare @Delimiter nvarchar(10) = 'enter delimiter'
Declare @InputTable nvarchar(2000) = 'enter input table name'
Declare @OutputTable nvarchar(2000) = 'enter output table name'
Declare @ColumnToSplit nvarchar(2000) = 'enter column to split'
Declare @lsql nvarchar(max)
Declare @treeDepth int
If Object_id('dbo.treeDepth') is not null
Drop table dbo.treeDepth
CREATE TABLE dbo.treeDepth (depth INT)
declare @ltext nvarchar(max)= 'Select max(1+(len('+@ColumnToSplit+')- len(Replace('+@ColumnToSplit+','''+@Delimiter+''','''')))/(isnull(nullif(len('''+@Delimiter+'''),0),1))) from '+@InputTable
insert dbo.treeDepth EXEC(@ltext)
Select @lsql = isnull(@lsql+',','') +
'xmlname.value(''/Node[1]/Node['+cast(number+1 as nvarchar)+']'',''varchar(1000)'') AS Col_'+cast(number+1 as nvarchar)+''
from master..spt_values where type = 'P' and number < (Select * from dbo.treeDepth)
set @lsql = '
WITH ForXML
AS
(
SELECT *,
CONVERT(XML,''''
+ REPLACE('+@ColumnToSplit+','''+@Delimiter+''', ''
Declare @InputTable nvarchar(2000) = 'enter input table name'
Declare @OutputTable nvarchar(2000) = 'enter output table name'
Declare @ColumnToSplit nvarchar(2000) = 'enter column to split'
Declare @lsql nvarchar(max)
Declare @treeDepth int
If Object_id('dbo.treeDepth') is not null
Drop table dbo.treeDepth
CREATE TABLE dbo.treeDepth (depth INT)
declare @ltext nvarchar(max)= 'Select max(1+(len('+@ColumnToSplit+')- len(Replace('+@ColumnToSplit+','''+@Delimiter+''','''')))/(isnull(nullif(len('''+@Delimiter+'''),0),1))) from '+@InputTable
insert dbo.treeDepth EXEC(@ltext)
Select @lsql = isnull(@lsql+',','') +
'xmlname.value(''/Node[1]/Node['+cast(number+1 as nvarchar)+']'',''varchar(1000)'') AS Col_'+cast(number+1 as nvarchar)+''
from master..spt_values where type = 'P' and number < (Select * from dbo.treeDepth)
set @lsql = '
WITH ForXML
AS
(
SELECT *,
CONVERT(XML,''
+ REPLACE('+@ColumnToSplit+','''+@Delimiter+''', ''
)
Select *, '+@lsql+' Into dbo.'+@OutputTable+' From ForXML
Alter table '+@OutputTable+'
Drop column xmlname
'
EXEC(@lsql)
No comments:
Post a Comment