Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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 在查询结果中将空格和方括号转换为unicode_Sql Server_Xml_Unicode_Cross Apply - Fatal编程技术网

Sql server 在查询结果中将空格和方括号转换为unicode

Sql server 在查询结果中将空格和方括号转换为unicode,sql-server,xml,unicode,cross-apply,Sql Server,Xml,Unicode,Cross Apply,我在SQLServer2012中使用了一个交叉应用和一个定制的XML函数(而不是UNPIVOT),在表中垂直移动值 SELECT A.USERID ,B.[ITEM] ,B.VALUE FROM #UPLOAD A CROSS APPLY [DBO].[TVF-XML-UNPIVOT-ROW]( (SELECT A.* FOR XML RAW) ) B WHERE [ITEM] NOT IN ('USERID' ) 查询成功地取消了对所有内容的锁定,但在此过程中,

我在SQLServer2012中使用了一个交叉应用和一个定制的XML函数(而不是UNPIVOT),在表中垂直移动值

 SELECT A.USERID
    ,B.[ITEM]  
    ,B.VALUE 
 FROM #UPLOAD  A
CROSS APPLY [DBO].[TVF-XML-UNPIVOT-ROW]( (SELECT A.* FOR XML RAW) ) B
WHERE [ITEM] NOT IN ('USERID' ) 
查询成功地取消了对所有内容的锁定,但在此过程中,将空格、破折号、括号等转换为各自的UNICODE值,如下所示:

EMPID   ITEM                                                                            VALUE    
123     _x0027_October_x0020_Bonus_x0020__x0028_Perm_x0020__x002B__x0020_Temp_x0029_    28.01
预期产出:

 EMPID   ITEM                           VALUE    
 123     October Bonus (Perm + Temp)    28.01
下面是函数、一些可以使用的临时值以及代码本身。如何在没有unicode值的情况下格式化字符串

CREATE FUNCTION [dbo].[tvf-XML-UnPivot-Row](@XML xml)
Returns Table 
As
Return ( 
        Select Item  = xAttr.value('local-name(.)', 'varchar(100)')
              ,Value = xAttr.value('.','varchar(max)')
         From  @XML.nodes('//@*') xNode(xAttr)
)

DROP TABLE #UPLOAD
CREATE TABLE #UPLOAD (USERID INT,['October Bonus (Perm + Temp)] FLOAT NOT NULL );

INSERT INTO #UPLOAD VALUES  (123,20.3),(240,35) 

 SELECT A.USERID
    ,B.[ITEM]  
    ,B.VALUE 
 FROM #UPLOAD  A
CROSS APPLY [DBO].[TVF-XML-UNPIVOT-ROW]( (SELECT A.* FOR XML RAW) ) B
WHERE [ITEM] NOT IN ('USERID' )

编辑:我现在想起来了,你不是2016年的+

如果2016+您可以使用此函数而不是XML方法

CREATE FUNCTION [dbo].[tvf-JSON-Unpivot-Row](@json varchar(max))

Returns Table 
As Return

Select [Key]
      ,Value
 From OpenJson(@json) 
示例

Select A.ID
      ,B.* 
 from  YourTable A
 Cross Apply [dbo].[tvf-JSON-Unpivot-Row]( (Select A.* For JSON Path,Without_Array_Wrapper ) ) B
 Where [Key] not in ('ID')
或包含空值

Select A.ID
      ,B.* 
 from  YourTable A
 Cross Apply [dbo].[tvf-JSON-Unpivot-Row]( (Select A.* For JSON Path,Without_Array_Wrapper,INCLUDE_NULL_VALUES  ) ) B
 Where [Key] not in ('ID')

看起来很熟悉:)JSON方法将更好地处理列名这是XML方法的一个已知问题。你有一些难听的名字,我唯一能想到的就是一系列replace()'sOkay,很高兴知道!我从一个企业管理的excel文件中获取数据,对于列名我只能做这么多。我有点想:)这就是为什么数据人应该统治这个词。只是为了澄清一下。XML对节点和属性名有点挑剔