Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 f值(例如,我认为OP在我们的例子中是指3)则不需要动态查询。如果数字小于5(0-4),则不需要用户定义的拆分函数,最好的解决方案是使用PARSENAME。请阅读我的答案:-)这是所有解释那里。任何半体面的字符串拆分器应该能够处理,即使没有深度值。但是,如_Sql Server 2008_Tsql_String Parsing - Fatal编程技术网

Sql server 2008 f值(例如,我认为OP在我们的例子中是指3)则不需要动态查询。如果数字小于5(0-4),则不需要用户定义的拆分函数,最好的解决方案是使用PARSENAME。请阅读我的答案:-)这是所有解释那里。任何半体面的字符串拆分器应该能够处理,即使没有深度值。但是,如

Sql server 2008 f值(例如,我认为OP在我们的例子中是指3)则不需要动态查询。如果数字小于5(0-4),则不需要用户定义的拆分函数,最好的解决方案是使用PARSENAME。请阅读我的答案:-)这是所有解释那里。任何半体面的字符串拆分器应该能够处理,即使没有深度值。但是,如,sql-server-2008,tsql,string-parsing,Sql Server 2008,Tsql,String Parsing,f值(例如,我认为OP在我们的例子中是指3)则不需要动态查询。如果数字小于5(0-4),则不需要用户定义的拆分函数,最好的解决方案是使用PARSENAME。请阅读我的答案:-)这是所有解释那里。任何半体面的字符串拆分器应该能够处理,即使没有深度值。但是,如果试图将多值参数传递给存储过程,则表值参数应该更好this@axmim不,不是。还有其他方法。@AXMIM,只有在每个字符串中的值数目未知时才需要动态查询。那样的话,你是对的。但是,如果您知道最大值的数目(例如,我认为OP在我们的例子中的意思是



f值(例如,我认为OP在我们的例子中是指3)则不需要动态查询。如果数字小于5(0-4),则不需要用户定义的拆分函数,最好的解决方案是使用PARSENAME。请阅读我的答案:-)这是所有解释那里。任何半体面的字符串拆分器应该能够处理,即使没有深度值。但是,如果试图将多值参数传递给存储过程,则表值参数应该更好this@axmim不,不是。还有其他方法。@AXMIM,只有在每个字符串中的值数目未知时才需要动态查询。那样的话,你是对的。但是,如果您知道最大值的数目(例如,我认为OP在我们的例子中的意思是3),那么就不需要动态查询。如果数字小于5(0-4),则不需要用户定义的拆分函数,最好的解决方案是使用PARSENAME。请阅读我的答案:-)所有的解释都在这里。请看问题的最后一行:“在上面的例子中,最大深度是3,但在现实世界中它可能是N个数字。”谢谢,我没有注意到这句话:-)在这种情况下,最好的选择是动态查询,当您使用SQLCLR SPLIT function编写SPLIT function时,是否有一种方法可以在不使用动态sql的情况下透视未知数量的列?请参见问题的最后一行:“在上面的示例中,最大深度为3,但在现实世界中可能是N个数字。”谢谢,我没有注意到这句话:-)在这种情况下,最好的选择是动态查询,当您使用SQLCLR SPLIT function编写SPLIT function时,是否有一种方法可以在不使用动态sql的情况下透视未知数量的列?请参见问题的最后一行:“在上面的示例中,最大深度为3,但在现实世界中可能是N个数字。”谢谢,我没有注意到这句话:-)在这种情况下,最好的选择是动态查询,当您使用SQLCLR SPLIT function编写SPLIT函数时,是否有一种方法可以在不使用动态sql的情况下透视未知数量的列?
Tree                 Depth
URL1||URL2             2
URL2||URL3             2    
URL3||URL4||URL5       3
URL1||URL2||URL3       3
COL1  COL2  COL3 DEPTH
URL1  URL2         2
URL2  URL3         2
URL3  URL4  URL5   3
URL1  URL2  URL3   3
SELECT PARSENAME(REPLACE(Tree,'||','.'), 1) as col1, PARSENAME(REPLACE(Tree,'||','.'), 2) as col2, PARSENAME(REPLACE(Tree,'||','.'), 3) as col3, Depth
from TableName
Declare @Delimiter nvarchar(10) = '||'
Declare @InputTable nvarchar(2000) = '<<input table name>>'
Declare @OutputTable nvarchar(2000) = '<<output table name>>'
Declare @ColumnToSplit nvarchar(2000) = '<<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+''','''')))/(len('''+@Delimiter+'''))) 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,''<Node><Node>''  
    + REPLACE('+@ColumnToSplit+','''+@Delimiter+''', ''</Node><Node>'') + ''</Node></Node>'') AS xmlname
      FROM '+@InputTable+'
)

Select *, '+@lsql+' Into '+@OutputTable+' From ForXML


Alter table '+@OutputTable+' 
Drop column xmlname
' 

EXEC(@lsql)