我正在运行这个查询,并得到下面提到的错误。有人能帮忙吗?
列名“中间名”包含XML所需的无效XML标识符;“”(0x0020)是错误的第一个字符。
SELECT
Username as [LastName],
'' AS [Middle Name],
'' AS Birthdate,
'' AS [SSN],
0 AS [Wage Amount]
FROM
Employee
FOR XML PATH发布于 2016-06-09 16:28:39
XML元素或属性名称中不能有空格。使用
SELECT Username AS [LastName],
'' AS [MiddleName],
'' AS Birthdate,
'' AS [SSN],
0 AS [WageAmount]
FROM Employee
FOR XML PATH 发布于 2019-11-13 14:44:02
对于最简单的情况,Smith的解决方案工作得很好。由于我有将字符(如空格、@、‘、/等)保留在XML上的约束,所以我最终通过使用Base64编码标识符来解决这个问题。(只需注意名称的长度不能depass 128位),那么在将XML作为输入数据读取的外部,另一小部分代码将很容易地将Base64转换为原始字符串。
CREATE FUNCTION [dbo].[ufn_string_To_BASE64]
(
@inputString VARCHAR(MAX)
)
RETURNS VARCHAR(MAX)
AS
BEGIN
RETURN (
SELECT
CAST(N'' AS XML).value(
'xs:base64Binary(xs:hexBinary(sql:column("bin")))'
, 'VARCHAR(MAX)'
) Base64Encoding
FROM (
SELECT CAST(@inputString AS VARBINARY(MAX)) AS bin
) AS bin_sql_server_temp
)
END
GO采取VARCHAR是很重要的,它会给我们带来更短的Base64代码。
您也可以在标识符中添加char(10)、char(13)。
动态SQL可以帮助构建临时表来存储中间数据。
在我的例子中,C#将Base64解码为字符串。
if (value.StartsWith("_"))
{
var base64Encoded = value.Substring(1).Replace('_','=');
try
{
var data = System.Convert.FromBase64String(base64Encoded);
value = Encoding.GetEncoding(1252).GetString(data);
}
catch (Exception e)
{
log.LogInformation(e.Message);
}
}照顾:
_,并在c#中删除它们。=。应该用类似于_的其他东西来代替它。实际上,这比这里所说的要复杂得多。
https://stackoverflow.com/questions/37731465
复制相似问题